Forum: Mikrocontroller und Digitale Elektronik BASCOM: HEX-Befehl per UART senden


von Dan (Gast)


Lesenswert?

Hallo zusammen,

ich möchte mit einem ATMega8 Befehle per UART an einen iPod senden.
(Baudrate 19200, Standardeinstellungen.)

Vom PC aus hat das ganze wunderbar funktioniert. Aber vom AVR bekomme 
ich es nicht hin.
So ein Befehl sieht zum Beispiel so aus:
0xFF 0x55 0x03 0x00 0x01 0x04 0xF8

Ich habe es mit

1
Header1 = &HFF
2
Header2 = &H55
3
Length = &H03
4
Modus = &H00
5
Command1 = &H01
6
Command2 = &H04
7
Check = &HF8
8
9
Printbin Header1 ; Header2 ; Length ; Modus ; Command1 ; Command2 ; Check
10
11
ODER
12
13
Print Hex(header1) ; Hex(header2) ; Hex(length) ; Hex(modus) ; Hex(command1) ; Hex(command2) ; Hex(check)

probiert, aber es will nicht funktionieren.
Verkabelung habe ich zig mal geprüft, ist korrekt.

Mache ich da was falsch? Gibt es alternativen?

Vielen Dank im Vorraus,

Dan

PS: Auch wenn Bascom hier verpönt ist, für meine Schnellanwendung ist es 
gerade sehr praktisch.

von Kai G. (runtimeterror)


Lesenswert?

Sendet Print am Ende nicht noch einen Zeilenumbruch hinterher? Stört den 
das ggf.?

Sende die Zeichen ansonsten mal an deinen Rechner - da hast du vermulich 
mehr Chancen zu debuggen.

Wie sieht die externe Beschaltung deines Controllers für die serielle 
Schnittstelle aus? Max232 verbaut?

von Dan (Gast)


Lesenswert?

Für die Kommunikation mit dem iPod ist kein MAX notwendig, dieser hat 
auch TTL-Pegel.

Ich werde mal an den PC senden und schauen was da so ankommt. Dazu muss 
ich aber erstmal wieder den MAX232 zusammenstecken.

von Frank L. (hermastersvoice)


Lesenswert?

Wenn ich mich recht erinnere, dann invertiert der MAX232 das Signal. 
Wenn du also keinen MAX verbaut hast, dann fehlt die Invertierung und 
der Empfänger erkennt nix. Wenn also der PC das richtige Datentelegramm 
empfängt und der IPOTT nicht, dann wirds wohl daran liegen.

bye

Frank

von Dan (Gast)


Lesenswert?

Also, habe jetzt den MAX232 angeschlossen. Am PC kommt alles gut an. 
Ohne irgendwelche Zeilensprungbefehle oder so.

Wie kann ich dann das mit dieser Invertierung lösen, falls das wirklich 
das Problem ist?

von Gast (Gast)


Lesenswert?

Print chr(Header1) ; chr(Header2);  etc.

von Christian_RX7 (Gast)


Lesenswert?

Ich glaube schon, dass am Ende des Print Befehles ein Zeilensprung 
gesendet wird, wie man das unterdrückt, keine Ahnung.

Viel Erfolg,
Christian

von Sven P. (Gast)


Lesenswert?

Beim alten BASIC für DOS hatte ich mal ein Problem mit einer Relaiskarte 
am Druckerport. Hat sich dann rausgestellt, dass, sobald ich das 
Steuerbyte gesendet hab, der Zeilenumbruch hinterher alles wieder 
überschreibt. Damals war es so zu lösen:
1
REM mit Zeilenumbruch:
2
Print #1, Status
3
4
REM ohne:
5
Print #1, Status;

von Peter D. (peda)


Lesenswert?

Dan wrote:
> PS: Auch wenn Bascom hier verpönt ist, für meine Schnellanwendung ist es
> gerade sehr praktisch.

Christian_RX7 wrote:
> Ich glaube schon, ...


Verpönt ist eigentlich nicht Bascom, sondern daß Bascom-Nutzer lieber 
etwas glauben oder rumprobieren, statt einfach mal in der Doku 
nachzusehen.

Wenn man Bibliotheksfunktionen benutzt, muß man auch nachsehen, wie sie 
zu verwenden sind.


C-Programmierer können natürlich auch versuchen, Bibliotheksfunktionen 
zu verwenden, ohne sie zu kennen.
Aber C hat ziemlich strenge Syntaxregeln und der Compiler meckert in der 
Regel sofort, wenn man etwas ohne Verstand benutzt.


Peter

von Kai G. (runtimeterror)


Lesenswert?

Semikolon am Ende der Print-Zeile sollte den Zeilenumbruch unterdrücken:

Print Hex(header1) ; Hex(header2) ;

Aber bist du dir sicher, dass die Hex-Funktion das tut, was sie soll?

Verwende mal die von Gast genannte Variante mit der chr()-Funktion. Das 
sollte eigentlich funktionieren. Ich weiß jetzt allerdings nicht, was 
der iPod an Daten erwartet.

von Dan (Gast)


Lesenswert?

Mit chr(xxx) funktioniert es!

Super. Vielen Dank für die Tipps.

von ich bins... (Gast)


Lesenswert?

Wie wäre denn der Anschluss an einen Beamer.

Meine Verbindung zwischen PC und Beamer funktioniert.

Nur was muss ich machen, damit das auch von einem AVR aus klappt.
Was muss denn noch zwischen Beamer und AVR?

Wenn ich einen Mega8 nutzen will und die beiden Pins 2 und 3 (TX und RX) 
schon für was anderes verwende, was könnte ich dann machen?

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.