Bascom: UART-Problem

Gast #93340
Lesenswert?

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
Gast #93343
Lesenswert?

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
Gast #93345
Lesenswert?

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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren