Forum: Mikrocontroller und Digitale Elektronik Bascom: UART-Problem


von McMurkser (Gast)


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

von McMurkser (Gast)


Lesenswert?

bzw. kann man mit BascAVR nen CR / LF machen bzw. ist das notwendig?

cya

McMurkser

von McMurkser (Gast)


Lesenswert?

Auch googlen bzw. Forumsuche bzw. lesen in der Hilfedatei brachte keinen
Erfolg :(


cya

McMurkser

von formtapez (Gast)


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

von Bernd Schmidt (Gast)


Lesenswert?

Es wird nach der Zeichenkette ein CR gesendet. Um das zu verhindern muss
ein ";" angehängt werden, also Print "abce";

von Dirk (Gast)


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

von McMurkser (Gast)


Lesenswert?

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

von stromi (Gast)


Lesenswert?

@Dirk
ich würde auch gerne deine codefetzen lesen. ist hoch "interesting"
wie andere so an probleme rangehen.
tschaui

von McMurkser (Gast)


Lesenswert?

Allerdings ;-)

Ich werde mal die Lösung von formtapez ausprobieren

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
Noch kein Account? Hier anmelden.