www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Bascom: UART-Problem


Autor: McMurkser (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: McMurkser (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
bzw. kann man mit BascAVR nen CR / LF machen bzw. ist das notwendig?

cya

McMurkser

Autor: McMurkser (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Auch googlen bzw. Forumsuche bzw. lesen in der Hilfedatei brachte keinen
Erfolg :(


cya

McMurkser

Autor: formtapez (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Bernd Schmidt (Gast)
Datum:

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

Autor: Dirk (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: McMurkser (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: stromi (Gast)
Datum:

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

Autor: McMurkser (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Allerdings ;-)

Ich werde mal die Lösung von formtapez ausprobieren

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.