Der 2313 hat doch eine HW-UART ? Wenn ja, kannst du doch mit
CONFIG Serialin=Buffered, size = nn eine Buffer definieren, in den der Bascom asynchron mit Interrupt reinschreibt, und du liest es aus, wenn du Zeit hast ?
(Help "Config")
Hallo,
ich hab ein Problem mit der Datenübertragung beim ATTiny 2313 mit der Serielen Schnitstelle.
Ich habe mehrere AVR's an einem Datenbus. Die Verbindung und der Datenaustausch klappt hervorragend!
Initialisiert habe ich es mit :
Open "comd.1:100,8,n,1,inverted" For Output As #1
Open "comd.0:100,8,n,1" For Input As #2
Das Funktioniert auch Perfekt! Daten kommen so an wie sie sollen!
So zu meinem Problem :
Wie kann ich es machen, das die Daten empfangen werden, wärend der AVR was anderes macht (z.b. einen A/D Wandler ausliest oder so)?
Kann ich die Daten aus einem Empfangspuffer lesen? Wenn ja wie?
Ich hab schon überlegt einen Interrupt auszulösen sobald am RxD sich was ändert, und dann mit Inkey eine Abfrage starte.
Leider ist es so, das wenn der Prozessor was macht, und eine "Anfrage" kommt, das er nach dem "etwas machen" garnix merkt! Also er sollte mit einem Ohr hinhören!
Grüße
Alex
Der 2313 hat doch eine HW-UART ? Wenn ja, kannst du doch mit
CONFIG Serialin=Buffered, size = nn eine Buffer definieren, in den der Bascom asynchron mit Interrupt reinschreibt, und du liest es aus, wenn du Zeit hast ?
(Help "Config")
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
Hi,
danke für die Antwort! Leider klappt das mit dem selber geöffneten Port nicht! Ich brauche nämlich beim output "inverted".
Den kann ich so nicht angeben!
Sonst würd ich gerne
Kann ich der Internen HW nicht sagen das sie beim TxD "inverted" nimmt?Code:$Baud 100 Config Serialin = Buffered , Size = 20 Enable Interrupts do B = Inkey()
Oder einfach nur die RxD-HW aktivirt?
Grüße
Alex
Inverted is'nich. Aber natürlich kannst du von der UART Rx u. Tx auch isoliert verwenden. Also receive mit der HW, senden zu Fuß, was ja auch leichter ist.
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
Hi PicNick,
also Senden langt mir mit
Open "comd.1:100,8,n,1,inverted" For Output As #1
...
...
Print #1, "Hallo"
Aber Empfangen sollte über die HW-UART des AVR, da ich sonst Systemrecourcen für den Empfang nutzen mus, was er ja im "Hintergrund"
erledigen kann.
Nur, wenn ich über die HW-UART auf Empfang gehe, initialisiert er mir die TxD auch, und zwar auf "High"!
Wie kann ich das getrennt machen? Hast Du dafür einen Code?
grüße
Alex
Yupp, das macht der Schweinehund soifort nach dem Befehl $Baud xxxx.Zitat von Alex20q90
Im weiteren Verlauf läßt sich das dann ändern:
SET UCR.3 schaltet TXD ein
SET UCR.4 schaltet RXD ein
RESET UCR.3 schaltet TXD aus <---------------- Das ist für Dich wichtig.
RESET UCR.4 schaltet RXD aus
Dann noch den Portx.x händisch wieder auf 0 setzen und gut isses.
Grüße
Henrik
@Henrik, danke, das hätt' ich dazusagen müssen
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
So hi,
hab jetzt folgendes erstellt : (auszug)
Das sind die Kriterien mit denen ich versuche die Seriellen Daten aus dem puffer zu lesen!Code:$regfile = "2313def.dat" 'AT90S2313 $crystal = 8000000 'Quarz 8MHz $baud = 110 Dim Name As Byte Config Serialin = Buffered , Size = 20 Enable Interrupts Reset Ucr.3 Portd.0 = 0 'Rx Port do name = Inkey() If Err = 0 Then If Name= Chr(001) Then xxxxxx endif endif loop end
Wenn ich aber :
Nutze klappt es! Woran kann das liegen?Code:$regfile = "2313def.dat" 'AT90S2313 $crystal = 8000000 'Quarz 8MHz Dim Name As Byte Open "comd.0:110,8,n,1" For Input As #1 do name = Inkey(#1) If Err = 0 Then If Name= Chr(001) Then xxxxxx endif endif loop end
Grüße
Alex
Bei der gebufferten Variante mußt du immer erst schauen, ob überhaupt was angekommen ist.Code:if ischarwaiting() then name = Inkey() If Name = 1 Then xxxxxx endif endif
Bemerkung: chr(1) = 1
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
Lesezeichen