PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : &B00000000 als ein Byte senden



carfan
16.03.2010, 18:20
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.

carfan
16.03.2010, 19:03
ich weiß aber genau darum geht es das zu vermeiden.
Denn damit hätte ich pro Bit nachher ein Byte datenverkehr.

for_ro
16.03.2010, 19:09
Dazu kannst du Printbin benutzen.

carfan
16.03.2010, 19:24
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?

PicNick
16.03.2010, 19:45
>>>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

mycroc
16.03.2010, 20:02
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.

mycroc
16.03.2010, 20:15
ja hast recht ist zu lang. Ich habe das nur auf die schnelle aus altem code kopiert ohne groß nachzudenken. :oops:

carfan
16.03.2010, 20:47
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 :-)

repi64
17.03.2010, 22:52
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.