Archiv verlassen und diese Seite im Standarddesign anzeigen : &B00000000 als ein Byte senden
Ich bin völlig aufgeschmissen. Ich versuche die ganze Zeit meinen ATMega32 so zu programmieren, das er mir die Daten von zB. PortD0 - PortD7 ausließt
und wen sich diese verändert haben mir schickt. Soweit so gut auslesen geht, vergleichen geht nur beim Schicken tritt das Problem auf, dass wenn ich einen der Tasta loslasse nichts gesendet wird, da er keinen chr(0) schicken kann. Wie kann ich das umgehen?
MfG Felix
peterfido
16.03.2010, 18:44
Über RS232 schickt man normalerweise immer als String.
mit str(byte) wandelst Du um.
ich weiß aber genau darum geht es das zu vermeiden.
Denn damit hätte ich pro Bit nachher ein Byte datenverkehr.
Dazu kannst du Printbin benutzen.
Vielen Dank doch nach Bascom PRINTBIN is equivalent to PRINT CHR(var);
Und ich habs gerade auch ausprobiert bei : Printbin 0; kommt nichts an.
Eigentlich muss es doch ne möglichkeit geben das so zu übertragen.
Oder könnte es am TerminelProgramm liegen, dass chr(0) einfach ignoriert wird?
>>>Oder könnte es am TerminelProgramm liegen, dass chr(0) einfach ignoriert wird?<<
Bingo 0 = NIL
Manche Terminal-Progs können einen Binärmode, ich weiss aber momentan keines auswendig
Sende den Wert als
dim binval as string* 9
binval = BIN(pind)
PRINT binval
peterfido
16.03.2010, 19:55
Eigentlich nur 3 Bytes.. 0-255
ich habe mal folgenden code erfolgreich getestet
$regfile = "m32def.dat"
$crystal = 1000000
$baud = 9600
Config Portd = Input
Dim _neu As Byte
Dim _alt As Byte
Do
_neu.0 = Pind.0
_neu.1 = Pind.1
_neu.2 = Pind.2
_neu.3 = Pind.3
_neu.4 = Pind.4
_neu.5 = Pind.5
_neu.6 = Pind.6
_neu.7 = Pind.7
If _neu <> _alt Then
Printbin _neu
_alt = _neu
End If
Loop
mit Hterm 0.6.3beta werden alle zustände angezeigt (auch &B00000000)
peterfido
16.03.2010, 20:07
Wozu so viele Bit Operationen? _neu=Pind spart und wirkt genauso.
ja hast recht ist zu lang. Ich habe das nur auf die schnelle aus altem code kopiert ohne groß nachzudenken. :oops:
Vielen Dank mit HTerm funktionierts. Eigentlich ging es um die Implemetierung diesen Protokolls :
Antwort: „i“ <Anzahl der Module, die gemeldet werden>
<Modulnummer> <HighByte> <LowByte>
<Modulnummer> <HighByte> <LowByte>
………………………………
<Modulnummer> <HighByte> <LowByte>
<CR>
Antwortlänge: TerminalMode aus: (3 + (Anzahl der Module) * 3) Byte
TerminalMode ein: (4 + (Anzahl der Module) * 6) Byte
Es werden nur die Inhalte der Module übertragen, bei denen sich die
Eingangszustände verändert haben.
PC fragt Eingangszustände ab:
Befehlsform: „m“ <CR>
Befehlslänge: 2 Byte
Antwort: „m“ <Anzahl der Module, die gemeldet werden>
<Modulnummer> <HighByte> <LowByte>
<Modulnummer> <HighByte> <LowByte>
………………………………
<Modulnummer> <HighByte> <LowByte>
<CR>
Antwortlänge: TerminalMode aus: (3 + (Anzahl der Module) * 3) Byte
Doch dies ist dank eurer hilfe nun ein Katzensprung :-)
Ein weiteres, schönes Terminalprogramm ist Docklight http://www.docklight.de/
Mal abgesehen davon, dass ich nicht ganz nachvollziehen kann, wieso der Bytewert nicht als ASCII String geschickt werden kann.
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.