Mit ICC-Code bist du im _GCC_-Forum ein bisschen verkehrt ;).
Aber dein Problem klingt nach einem Takt-problem...
- Bist du sicher, dass der Atmega mit den 7,...MHz läuft und nicht mit
den 1? MHz Internem Takt? (Stichwort: Fuses
http://www.mikrocontroller.net/articles/AVR_Fuses )
- ist im Pc-Programm dieselbe Baudrate eingestellt (die "9600????" ;) ),
wie im Atmega?
hth. Jörg
ps. benutz BITTE die [ c] [/ c] -Tags, danke!
[ c]
danke Jörg!
ich bin neu hier. :-P
"Aber dein Problem klingt nach einem Takt-problem..."
ich glaube auch.
Ich glaube schon, dass ATmega8 mit 7.3728Mhz funktioniert.
Aber morgen werde ich nochmal ueberpruefen.
Terminal Programm habe ich bestimmt mit 9600 MHz eingestellt.
Mit Osizilloskop habe ich Rx auch beobachtet. Es ist richtig.
[/ c]
> Ich glaube schon, dass ATmega8 mit 7.3728Mhz funktioniert.
Das glauben wir alle (sogar ATMEL glaubt daran). Die Frage ist nur, ob
du deinen Controller auch mit dem richtigen Quarz (7,3728MHz) betreibst,
und ob du die Fuses richtig eingestellt hast.
> Terminal Programm habe ich bestimmt mit 9600 MHz eingestellt.
Wow... eine RS232 Schnittstelle mit 9.600.000.000 Baud? Cool! ;)
> Mit Osizilloskop habe ich Rx auch beobachtet. Es ist richtig.
Bitte um Definition von: "es ist richtig"
Gruß,
Magnetus
Übrigens:
Die [c ] und [/c ] Tags müssen ohne Leerzeichen geschrieben werden.
Das [c ] markiert den Anfang eines Programmausschnitts und das [/c ]
markiert das Ende.
Das Ganze kann dann z.B. so aussehen:
Ich habe eine Entwicklungsboard gekauft.
Ich glaube, dass die Fusse richtig eingestellt werden.
9600MHz..... hab falsch eintippt.. war 9600bps
Die Bits an Pin Rx an ATmega8 sind richtig. Ein Bit betraegt circa.
1/9600s. (also 9600Hz) Wenn ich "A" eingetippt habe, wird 0x41
geschickt.
> Die Bits an Pin Rx an ATmega8 sind richtig. Ein Bit betraegt circa.> 1/9600s. (also 9600Hz)
"Circa 1/9600s (also 9600Hz)" reicht nicht. Es müssen genau 9600 Baud
sein. Es wäre z.B. denkbar, dass der µC mit dem internen 8MHz Takt
läuft. Da siehst du mit dem Oszi auf die Schnelle keinen großen
Unterschied.
> Wenn ich "A" eingetippt habe, wird 0x41 geschickt.
Heisst das jetzt, dass der PC korrekterweise 0x41 an den µC schickt,
oder dass der µC mit 0x41 antwortet?
Ob er bei genau 9600 Baud arbeitet, kann dieser Oszilloskop nicht mehr
genauer sagen. Aber ich bin sicher, in den Bereich von 9550-9650.
Wenn ich "A" eingetippt, wird 0x41 an den uC geschickt.
1
while(1)
2
{
3
if(UCSRA&(1<<RXC))
4
{
5
tmp=USART_Receive();
6
USART_Transmit(tmp);
7
8
if(tmp=='a')
9
{
10
USART_Transmit('O');
11
USART_Transmit('K');
12
}
13
if(tmp=='A')// wenn ich 'A' tippe, wird hier nicht gelaufen
14
{
15
DISP_PORT=0x01;
16
USART_Transmit_2();
17
}
18
}
´bei tmp=='A' sollte pin 0 bei PORTC einen High Pegel ausgeben.
Aber es wurde nicht geklappt.
> Ob er bei genau 9600 Baud arbeitet, kann dieser Oszilloskop nicht mehr> genauer sagen. Aber ich bin sicher, in den Bereich von 9550-9650.
Glauben (sicher sein) und wissen sind zwei paar Schuhe...
1
DISP_PORT=0x01;
Wer weiss was sich hinter "DISP_PORT" versteckt...
Hast du den entsprechenden Portpin auch vorher als Ausgang gesetzt?
Also, wenn ich das Ganze noch mal so durchlese, fällt mir auf, dass Dein
µC ja scheinbar gar nicht über die Serielle Schnittstelle antwortet,
oder?
Regt sich denn überhaupt etwas am TX-Pin des Controllers?
Tx antwortet etwas, aber nicht die richtige Zeichnen.
Dieses Programm sollte die Zeichnen, die ich gegeben habe,
zurueckschicken.
Wenn ich "A" schicke, uC kennt ihn nicht. Aber er schickt etwas anderes
zurueck.
Du bist wirklich sicher, dass der Atmega für "Crystal Oscillator" - so
heißt das im Datasheet!, im deinem Brennprogramm kann es anders heißen
(insbesonders NICHT mit "External Clock" verwechseln!!) - ge'fuse't ist?
Nein, bin nicht sicher. Ich pruefe es gerade ueber. Es kann moeglich
sein, dass die Entwicklungsboard nicht richtig funktioniert oder ich
nicht es richtig eingetellt habe.
Die interne Oszillator wurde wahrscheinlich benutzt. :-P
Die Fusse wurden nicht richtig eingestellt.
Ich benutze ICCAVR als Complier und Ponyprog ueber ISP(kein JTag), um
die Programm unterzuladen. Wie kann ich damit die Fusse richtig
einstellen?
Ich bedanke mich alle hier. Thank u very much~~~~~xie xie(chinesisch):-)
Carol wrote:
> die Programm unterzuladen. Wie kann ich damit die Fusse richtig> einstellen?http://www.mikrocontroller.net/articles/AVR_Fuses#Ponyprog2000
Aber Achtung:
Die Darstellung verwendet (wie das Tutorial) einen Quarzoszillator.
Wenn du einen Quarz benutzt, dann muessen die Häckchen bei
CKSEL0 - CKSEL3 nicht gesetzt sein.
Vor den Änderungen die Fusebits einlesen nicht vergessen!