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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.