www.mikrocontroller.net

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


Autor: Dan (Gast)
Datum:

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

Header1 = &HFF
Header2 = &H55
Length = &H03
Modus = &H00
Command1 = &H01
Command2 = &H04
Check = &HF8

Printbin Header1 ; Header2 ; Length ; Modus ; Command1 ; Command2 ; Check

ODER

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.

Autor: Kai G. (runtimeterror)
Datum:

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

Autor: Dan (Gast)
Datum:

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

Autor: Frank L. (hermastersvoice)
Datum:

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

Autor: Dan (Gast)
Datum:

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

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Print chr(Header1) ; chr(Header2);  etc.

Autor: Christian_RX7 (Gast)
Datum:

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

Viel Erfolg,
Christian

Autor: Sven P. (haku) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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:
REM mit Zeilenumbruch:
Print #1, Status

REM ohne:
Print #1, Status;

Autor: Peter Dannegger (peda)
Datum:

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

Autor: Kai G. (runtimeterror)
Datum:

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

Autor: Dan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mit chr(xxx) funktioniert es!

Super. Vielen Dank für die Tipps.

Autor: ich bins... (Gast)
Datum:

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

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.