Hey,
Ich möchte mit meinem Kamera (54g10) (Als Anhang Dadenblatt) über mein
microcontroller steuern.
Von Anfang an, als test wollte ich prüfen ob die Kamera überhaupt die
Kommunikation akzeptiert!!
leider klapp nicht.
device: atmega 8
quarz: 4Mhz
Kamera BAud: 9600
kann jemand mir weiter helfen.
1
#ifndef F_CPU
2
/* In the new version of the WinAVR/Mfile Makefile guideline One can defined F_CPU in the Makefile, a repeated
3
definition here would lead to a compiler warning . therefore "prevention" through #ifndef/#endif
4
5
This "Prevention" can lead to Debugger, if AVRStudio use a another, not the hardware fitting Clock rate:
6
Then the following definition doesn't use, but instead the default value (1 MHz?) of AVRStudio - hence
7
the Output of a warning if F_CPU yet does not define:*/
8
#warning "F_CPU was not defined yet, now make up with 4000000"
9
#define F_CPU 4000000L // Systemtakt in Hz - define as long>> Without errors in the computation
>leider klapp nicht.
Was klappt nicht? Kommen gar keine Zeichen an? Kommen die falschen
Zeichen an?
Hast du die Kamera mal an einen PC mit Terminal-Programm angeschlossen,
um zu prüfen, ob die überhaupt was sendet?
Oliver
> // Willkommensnachricht senden ...> while (1)> {> // Auf komplettes Kommando warten ...> uart_readline(kommando);
Da kannst du lange warten.
Die Kamera sendest NICHTS ohne Aufforderung.
Das heisst: DU musst ein Kommando senden.
Siehe Datenblatt Seite 2.
vielen Dank für die Antworten.
>holger>Das heisst: DU musst ein Kommando senden.
Du hast recht, ich hatte vergessen ein Kommando zu senden.
ich möchte den AES Auto level auf AES setzen (s. seite 5)
und dann möchte ich überprüfen ob einem Kamera den Befehl bekommen hat.
leider kommt kein zeichen auf dem portB, für mich bedeutet, dass es
keinen Befehl bekommst!?!?! oder senden ich den Befehl falsch!?!?
ich danke Ihr im voraus für ihre hilfe
Hey,
ich möchte gern AES AUTO (Seite 5, siehe datenblatt) auf 0x02 setzen,
aber es ist mir nicht klar wie ich das machen muss.
Hat jemand schon so was programmiert!?!? und wie!?!?
Hallo,
in deinem Code sehe ich weder die Steuerzeichen noch die Prüfsumme. Die
Mintron Kameras benötigen das im Datenblatt beschriebene Protokoll. Ohne
dieses reagiert die Kamera nicht.
Gruß
Einhart
Könnte es sein, daß Du da etwas ganz grundlegendes nicht verstanden
hast?
uart_readline liest eine Textzeile, deren Inhalt Du mit strcmp mit einer
Textkonstanten vergleichst. Soweit, so gut.
Dann aber versuchst Du, diese Textzeile an PORTB auszugeben ...
Außerdem: Kommuniziert die Kamera im Klartext? D.h., will sie wirklich
die Zeichen "0" und "2" nacheinander empfangen, um AES zu konfigurieren?
Da hast Du wohl die Beschreibung nicht so ganz verstanden.
Die Kamera will das Steuerzeichen 0x02 sehen - das ist EIN Zeichen,
keine Zeichenkette.
> Könnte es sein, daß Du da etwas ganz grundlegendes nicht verstanden>hast?
leider ja,
ich bin total anfängerin, ich habe mir zuerst einem Program geschrieben,
wo ich ADC werte über meine serielle schnittstelle zugeschikt habe, das
hat funktioniert, danach wollte ich meinem Kamera über rs232 auch
steuen.
Habe ich dann vom Hersteller dieses Datenblatt bekommen. Aber wie fänt
ich damit an weiss ich nicht.
Ich verstehe nicht so ganz wie ich das Datenblatt benutzen muss.
gruß
>in deinem Code sehe ich weder die Steuerzeichen noch die Prüfsumme. Die>Mintron Kameras benötigen das im Datenblatt beschriebene Protokoll. Ohne>dieses reagiert die Kamera nicht.
Bitte kannst du mir gut beibringen, ich verstehe nicht gut das
Datenblatt
danke im voraus
OK noch etwas detaillierter:
Du schreibst z.B. zwei Unterprogramme
1. Routine SendCommand
bringt ein Kommando in die passende Form
Ein Kommando an die Kamera oder eine Antwort von der Kamera hat immer 19
ASCII Zeichen, die Form:
STX, 15 Zeichen, ETX, CRC msb, CRC lsb
Dein Kommando wäre
0x02 STX
0x48 command group
0x02 AES
0x00 Auto/Fix
0x00 Set auto
0x00 not used
0x00 not used
0x00 not used
0x00 not used
0x00 not used
0x00 not used
0x00 not used
0x00 not used
0x00 not used
0x00 not used
0x00 not used
0x03 ETX
0xxx CRC16 msb
0xxx CRC16 lsb
2. Routine TransferCommand
macht den Handshake mit der Kamera
sendet Anforderung (ENQ)
wartet auf Bestätigung (ACK)
sendet das Kommando
wartet auf Bestätigung (ACK)
wartet gegebenenfalls auf Antwort (auch 19 Zeichen)
sendet Bestätigung (ACK)
ok, jetzt verstehe ich noch besser, und deswegen habe ich einigen fragen
1. frage:
.Buf[1] = 0x21/0x31 vergessen oder!!!
2. frage: CRC
ich hab schon viel darüber gelesen, ich komme einfach nicht weiter.
Viele hier hatten bereits das selbe problem, aber ich komme nicht klar
mit den Antworten. Ich will meinen CRC händisch berechnen, dabei sind
folgende Daten gegeben:
Generatorpolynom: X¹⁶ + X¹⁵ + X² +1
Daten: 0x1FC01
GARANTIERT Richtiges Ergebnis: ????
ich habe sogar folgenden Bespielcode für die CRC- Berechnung gefunden.
Zu 1)
Sorry, die 0x21 habe ich vergessen.
Zu 2)
Ich probiere 'mal ob meine Kamera den Befehl kennt. Dann poste ich
heute abend die kompletten 19 bytes inclusiv CRC.
Zu 3)
Fertige CRC16 Routinen sollte es im Netz in großer Menge geben.
>Antwort an Einhart
Hey Einhart,
danke erst mal für deien Mühe,
aber seit heute morgen versuche ich mit dem code ( andere formel habe
ich auch probiert) CRC zu berechnen leider sind meine erwartungen
falsch.
Generatorpolynom: X¹⁶ + X¹⁵ + X² +1 => 1 1000 0000 0000 0101 => grade 16
Rahmen: 0x1E001 => 1 1110 0000 0000 0001
Rahmen mit Anhang => 1 1110 0000 0000 0001 0000 0000 0000 0000
Nun wird der Rahmen mit Anhang von links her durch das Generatorpolynom
dividiert dabei ist:
der Rest => 100 0000 0001 1110
An den Rahmen ohne Anhang wird nun der Rest angehängt:
übertragener Rahmen => 1 1110 0000 0000 0001 100 0000 0001 1110
Der Rest der Division ist ungleich null. => 1111 0000 0000 1010
Warum????
Wie bist du zum:
0xBD
0xD3 gekommen??
vielen dank für deinen Hilfe
Die crc16 (nicht crc32!) Routine läuft über 16 Zeichen, das STX (0x02)
am Anfang gehört nicht dazu. Im Beispiel sind das 16 bytes ab 0x21.
Ich habe einfach einen tabellenbasierten Algorithmus aus dem Web
gesucht. Den oder einen andern solltest du auch für gnu c finden können.
Such 'mal nach Easy Hash 1.3. Damit kannst du alle möglichen Prüfsummen
auf dem PC rechnen.
Gruß
Einhart
Hey einhart,
ich habe endlich verstanden wie man CRC berechnet und habe eine
Algorithmus dafur geschrien.
aber mit meinem untere Codereagiert die Kamera nicht, ichbin neueling
und versteht immer noch nicht gut wie ich meine code schreiben muss
Ich habe durst auf hilfe!!!