Hallo,
ich versuche seit einige Tag die kommunikartion zwischen mein Avr
(atmega 8) und meine Kamera einzubauen, Um zuerst zu überprüfen on es
überhaupt eine Kommunication zwischen die beiden gibt, habe ich mir
gedacht so ein programm zu schreiben, wo der kontrollersendet ein (enq)
sende und bekommt eine (ack), die auf dem Portb angezeigt muss, leider
kriege ich es nicht hin.
1
intmain(void)
2
{
3
charkommando;
4
5
// RS232 einschalten ...
6
setup_uart();
7
DDRB=0xFF;
8
9
//sendet Anforderung (ENQ)
10
uart_putchar('5');
11
kommando=uart_getchar();
12
13
if(kommando='6')
14
{
15
PORTB=0x0F;
16
}
17
else
18
PORTB=0x55;
Ich bin Neuilling in Microcontroller und wäre auch dankbar von einem
Stuck code.
Die Kommunikation sequence sieht si aus:
controller camera
ENQ(05h)
------------------------------------------->
ACK(06h)
<-----------------------------------------
COMMAND
------------------------------------------->
ACK(06h)
<-----------------------------------------
RESPONSE
<-----------------------------------------
ACK(06h)
------------------------------------------>
viele grüße
Penie Lydos schrieb:
> controller camera> ENQ(05h)
Ohne Deine uart_putchar() zu kennen, wenn Du das obige senden willst,
darfst Du nicht
> uart_putchar('5');
machen. Damit schickst Du (normalerweise) 35h, nicht 05h ...
Gruß
Jens
Du solltest Dich erstmal mit grundlegenden Sachen beschäftigen, z.B. dem
Unterschied zwischen dem Zeichen 'E' und dessen hexadezimaler
wertigkeit. Die ist nämlich nicht 05h sondern 45h
schau dir mal diese Tabelle an:
http://www.torsten-horn.de/techdocs/ascii.htm
Wenn Du das Zeichen 05h senden willst, dann mußt Du sowas machen:
1
//sendet Anforderung (ENQ)
2
uart_putchar(0x05);
Und beim Empfang ebenso, das ACK was die Cam liefert ist nicht das
Zeichen '6' sondern der hexadezimale Wert 06h ... Also müßte das in etwa
so aussehen:
1
response=uart_getchar();
2
3
if(response==0x06){
4
// irgendwas machen was eben gemacht werden soll wenn die cam ACK gesendet hat
5
}
Leute mit mehr C Wissen mögen mich bitte berichtigen falls das jetzt
Schwachsinn ist ...
Gruß
Jens
danke,
so geht auch nicht,
wenn ich eine test mit eine andere PC als terminal, lauft alles gut ich
kann senden und empfangen ohne pb.
Leider kann ich nichst mit meine KAmera anfangen.
Als Anhang noch die interface spécifications.
Falls jemand mir helfen kann, danke im voraus.
gruß
Hallo,
ich habe jetzt schritt für schritt fehler gesucht und es scheint das der
Programm hier kommando = uart_getchar();
hängt.
Bitte kan jemand mir sagen warum!?
gruß
Penie Lydos schrieb:
> Hallo,> ich habe jetzt schritt für schritt fehler gesucht und es scheint das der> Programm hier kommando = uart_getchar();> hängt.
Wahrscheinlich weil er auf was zum Empfangen wartet. Ich hab in c auch
noch nix mit dem UART gemacht, aber ich würde vllt. eher zum
Interruptbetrieb wechseln.
Ausserdem solkltest Du in der if Anweisung auch wirklich einen Vergleich
machen, und keine Zuweisung:
danke
>if (kommando == 0x06)
tipp fehler habe geändert.
>Wahrscheinlich weil er auf was zum Empfangen wartet
habe ich auch wie du gedacht und eine interrupt service routine gemacht,
bekomme ich trotzdem 0 an PORTB
Penie Lydos schrieb:
> habe ich auch wie du gedacht und eine interrupt service routine gemacht,> bekomme ich trotzdem 0 an PORTB
So meinte ich das nicht, lies Dir mal hier im Forum das AVR-GCC Tutorial
durch. Da steht wie man UART mit Interrupt macht:
Allgemein das Tutorial: AVR-GCC-Tutorial
Interrupt bei UART: AVR-GCC-Tutorial: Interruptbetrieb
Gruß
Jens
Hallo,
laß den Quatsch an dieser Stelle auch noch mit Interrupts zu spielen.
UART-Init stimmt?
Verbindung AVR mit PC-Terminalprogramm als Test geht?
An den Routinen kann man genaugenommen nichts falsch machen...
Was hast Du als Pegelwandler am AVR? MAX232`? Spannungen dort stimmen?
Gruß aus Berlin
Michael
Hallo,
danke erst mal an alle
>Michael>Was hast Du als Pegelwandler am AVR? MAX232`? Spannungen dort stimmen?
Alles stimmt, nur das ich keine pegelwandler habe, ich dachte es wäre
nicht nötig!!!!
alle die USART funktionen habe ich schon getestet, dieses mal war mein
Terminal nicht die camera sonders eine andere PC. Und es ging alles
wunderbar.
gruß
Hallo,
AVR-UART ohne Pegelwandler zum PC geht?
Bezweifle ich jetzt mal, +/-12V RS232 sind keine 0V/5V vom AVR und die
Signalpolarität wäre auch falsch rum...
Gruß aus Berlin
Michael
Penie Lydos schrieb:
> alle die USART funktionen habe ich schon getestet, dieses mal war mein> Terminal nicht die camera sonders eine andere PC. Und es ging alles> wunderbar.
Also, welche Kombination hast Du jetzt wie getestet?
1
PC <----------------> PC
2
PC <--Pegelwandler--> AVR
3
AVR <----------------> Cam
4
PC <--Pegelwandler--> Cam
Wenn die Cam TTL Pegel liefert, und nur dann, kann AVR <---> Cam
funktionieren ohne Pegelwandler.
Jens
ich würde mal AVR --- Pegelwnadler --- Cam testen...
Oder hab ich den Fall übersehen?
Weil die CAM kann ja einfach so an den PC und der macht +/-12V...