Hi. Ich habe mehrere AVRs per UART miteinander vernetzt. Als Master fungiert ein AT90S8535 als Slaves fungieren AT90S2313. Das funktioniert auch alles auf Anhieb. Bis auf ein Problem: Ich will eine Zahl aus einer Variable übertragen. '------------------------------------------------------------- 'Master-Code Wrtcd: Print "1" 'das funzt noch Waitms 125 Print "123456" '------------------------------------------------------------- 'Slave-Code Dim Hilf1 as String * 6 Cls Upperline Lcd "Test" Do If Inkey() = "1" then goto Empfang 'das klappt auch noch Loop ... Empfang: Input "TEST", Hilf1 Cls Upperline Lcd Hilf1 End '------------------------------------------------------------- Der Slave bringt auch am Anfang auf dem LCD ein "Test" und löscht es, wenn der Master den String sendet. Aber dann bleibt das LCD leer. ICh denke, dass dem Slave das "Carriage Return" oder "Line Feed" vom Master oder sonstwas fehlt. Oder was meint ihr? Bzw. Wie würdet ihr es machen ? (Ich möchte eigentlich nur UART verwenden / kein I²C ) Danke für eure Mithilfe! :) cya McMurkser
bzw. kann man mit BascAVR nen CR / LF machen bzw. ist das notwendig? cya McMurkser
Auch googlen bzw. Forumsuche bzw. lesen in der Hilfedatei brachte keinen Erfolg :( cya McMurkser
Hallo ! Mach es doch per Interrupt... geht doch viel bequemer. Am besten denkst Du Dir auch noch irgendwelche Steuerzeichen aus, zwischen denen der zu übertragene Text übertragen wird. Dim Buffer(15) As Byte ' Buffer für eingehende Zeichen am UART Dim N As Byte ' Zähler für empfangene Bytes Dim Temp as Byte On Urxc Onrxd 'InterruptRoutine setzen Enable Urxc 'Interupt URXC einschalten Enable Interrupts 'Interrupt global zulassen Mainloop: For Temp = 1 To 15 Print Chr(buffer(n)); 'Buffer ausgeben zum Testen Next Temp Goto Mainloop '----------------------------------------------------------------------- --- ' Byte von der seriellen Schnittstelle lesen (wird per interrupt ausgelöst) '----------------------------------------------------------------------- --- Onrxd: Incr N If N = 15 Then N = 1 'Begrenzung Buffer(n) = Udr 'Byte einlesen Return
Es wird nach der Zeichenkette ein CR gesendet. Um das zu verhindern muss ein ";" angehängt werden, also Print "abce";
Hi, du solltest dir am besten ein kleines Protokoll ausdenken. z.B. startbefehl, µCnr, Befehl, CRC Check , stopbefehl Du solltest die Daten auch mit den Befehlen Inputbin empfangen Beispiel: Inputbin "Startbyte, BefehlsByte , CRC, Stopbyte" Senden wuerde dann wie folgt funktionieren: Printbin "startbyte, BefehlsByte, CRC, Stopbyte" Schau dir am besten die Befehle mal an. (Schreibe diesen Text aus dem Kopf) .... wenn du moechtest kann ich dir heute abend mal ein Prg Auszug aus meinem Programm posten. Mfg Dirk
Jo, Danke ihr habt mich schon sehr weiter gebracht! :) Ich bin für jeden Codefetzen dankbar gg cya McMurkser P.S.: Ich häng schon seit ner Woche an diesem Problem
@Dirk ich würde auch gerne deine codefetzen lesen. ist hoch "interesting" wie andere so an probleme rangehen. tschaui
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.