Problem atmega128

Gast #281764
Lesenswert?

Hey Leute bin schon ein paar Tage hier am verzweifeln.

Ich versuch den Uart1 meines 128ers zu nutzen. Den 103er Modus hab ich
draussen. Vielleicht iss da noch etwas bei den FUSE bits zu beachten
ich schick mal eine Einstellung mit(siehe Anhang).Ich habe den
Controller auf 8Mhz intern laufen. Ich habe auch den Treiber von Peter
Fleury benutzt... ist der sicher ??? Bei mir funktioniert der nicht.
Ich hab die so initialisiert:

uart1_init(38400);

müsste doch dann funzen ???

aber nichts desto trotz habe ich meine eigene Init gemacht.

void my_uart1_init(unsigned int baudrate)
{
  unsigned char baudh;
  unsigned char baudl;

  UART1_TxHead = 0;
        UART1_TxTail = 0;
        UART1_RxHead = 0;
        UART1_RxTail = 0;

  baudh = (unsigned char)(((F_CPU/baudrate/16)-1)>>8);
  baudl = (unsigned char)((F_CPU/baudrate/16)-1);


UCSR1B =
(1<<RXCIE1)|(1<<RXCIE1)|(1<<RXEN1)|(1<<TXEN1)|0<<UCSZ12)|(0<<USBS1);
//rx com.Int en tx com.Int en  8 Bit Data mode   1 Stopbit

UCSR1C = (1<<UCSZ10)|(1<<UCSZ10);
  // 8bit data mode
UBRR1H = baudh;
UBRR1L = baudl;

sbi (DDRD,3); // set TxD1 as output
sbi(PORTD,3); // set hi
cbi (DDRD,2); // set RxD1 as input
cbi(PORTD,2); //clear bit

}

müsste aber auch laufen ????
Angehängte Dateien:
Gast #281770
Lesenswert?

Hy
OCDE ist nur fürs Debuggen via JTAG und Powersavemode wichtig. Hat
damit ueberhaupt nichts zu tun. Deine CLKSEL Bits sind auch auf intern
8Mhz richtig konfiguriert.
Hast Du irgendeine Moeglichkeit zu schauen ob ueberhaupt ein RX bzw. TX
Interrupt auftritt ? Ne LED oder sowas ?

Freudi
Gast #281775
Lesenswert?

Ach so kleiner Nachtrag: Vielleicht zufällig ein Null-Modem Kabel
erwischt ? Dann kann nix gesendet werden (TX und RX vertauscht ?).
Oszilloskop zur Hand ? Sonst einfach mal TX und RX tauschen......
Gast #281776
Lesenswert?

1. Das Kabel und den Max transeiver den ich benutze ist in einem Atmega8
Bord drin. Das funktioniert alles einvandfrei. Ich haben nun den Tx Pin
auf meinem 8er Ic Sockel mit dem TX1 (PIN28/atmega128) verbunden dass
muss gehen.

2.Ich habe mir gerade das Tool runtergeladen..hmm scheint ganz gut zu
sein. Aber dass empfängt nur 0x00 ....
Gast #281777
Lesenswert?

leider hab ich auch kein Oszi... ;(
ich sende vom atmega 0x55 und im Terminal empfange ich bei einer
baudrate von 2400 immer C0.... ich habe aber Baudrate von 38400
eingestellt und da kommt nix ....
Gast #281778
Lesenswert?

Schon wieder einer, der nicht weiß, daß die UART asynchron arbeitet.

Die Baudrate muß eingehalten werden, wie sonst soll der PC wissen, nach
welcher Zeit welches Bit anliegt ?

Und das geht nur mit nem Quarz zuverlässig und nicht mit dem wackligen
internen RC-Oszillator !!!


Peter
Gast #281785
Lesenswert?

Dann muss ich mich nochmal einschalten. Die Fuse-Bits haste schon selber
rausgefunden ...  CKSEL0 bis 3 alle 1 , also alle Haken bei CKSELX bei
Ponyprog raus.

Kannst Du nochmal ne LED an RX-Int anschliessen und dann mit dem
Terminalprog Deiner Wahl mal "in die Tasten hauen" ? Dann sollte die
LED flackern. Nur um auszuschliessen das das Kabel wirklich richtig
ist, das ist naemlich der Fehler der mir am haeufigsten unterkommt.

Ach und im Terminalprogramm alles waas nach Handshake riecht
ausschalten, sonst kann es passieren das das Terminalprogramm auf eine
Data-Ready Leitung wartet oder ... schlimmer in dem von Dir verwendeten
Kabel signalisiert ein Handshake-Signal das der Atmel nicht bereit ist
Daten zu empfangen. Bei Hyperterminal muss uebrigens das "lokale
Echo" an sein, wenn Du die Zeichen die Du an den Atmel sendest sehen
willst.

Freudi
Gast #281787
Lesenswert?

Hä? Komisch bei mir ist alles auf 1 also nicht gesetzt. Aber da muss ich
doch gleich noch mal ins Manual schauen ... und siehe da

For resonators, the maximum frequency is 8 MHz with CKOPT unprogrammed
and 16 MHz with CKOPT programmed.

Also CKOPT ist ja in Deinem Screenshot nicht gesetzt, muss aber für 16
Mhz.

Was macht die RX LED ?

Freudi
Gast #281789
Lesenswert?

also ich hab da ganz komische Effekte.... Ich hatte den 128er mit meinem
8er verbunden (der 8er ist meine "Fernbedienung für den 128er)
wenn ich dort ne Taste drücke wird über den Uart ein Zeichen von 0-9 je
nach taste gesendet. Das funktioniert.

Schließ ich jedoch den 128er an den PC an geht nix mehr... ????

Ich meine Wenn dass ein Nullmodemkabel wäre, dann würde ich ja die
Zeichen die ich mit der Fernbedienung sende nicht sehen ??? Ich will
damit sagen ich habe mit dem gleichen Kabel meine Fernbedienung
gemacht.
Gast #281790
Lesenswert?

also genaugenommen sende ich mit dem ATmega8 die Zeichen ,möchte diese
mit dem 128er einlesen (RX Int kommt) danach möchte ich das eingelesene
Zeichen an das Terminalprog senden... so da kommt nix an,
das kann doch nicht sein ????
Gast #281791
Lesenswert?

Nur zum Verständis ...
UART0 geht zum ATmega8 und UART1 zum PC ?
Bitte nicht beledigt sein, wenn man so einfache Sachen fragt, aber ich
nehme an das Du die LED Tests mit UART1 gemacht hast, denn irgendwie
bleibt ja nur doch das Kabel als Ursache übrig. Benutzt Du wirklich
dasselbe oder hast Du zum PC noch ein Adapter dazwischen ? Hast Du 2
Serielle Schnittstellen am PC ? Wenn ja versuche mal die andere.
Was für ein OS auf dem PC ?

Freudi
Gast #281794
Lesenswert?

Hi,

UART und interner Oszillator geht schon mit dem AVR (Mega8/16).
Allerdings sollte man das Calibration Byte setzen. Ich weiß nicht ob
der Mega128 das auch braucht.

Register heißt OSCCAL, zum Auslesen kann man das AVRStudio (ich
benutzte STK500) benutzen. Das wird dann in den Sourcecode hardcodiert
und dann läuft der UART zuverlässiger....

z.B.
ldi temp, 0xD0
out OSCCAL, temp


Gruß ka-long

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren