Forum: Mikrocontroller und Digitale Elektronik Problem atmega128


von Andi666 (Gast)


Angehängte Dateien:

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 ????

von Ingo (Gast)


Lesenswert?

Hast Du daran gedacht die ClkDiv8 Fuse zu disablen? Sonst läuft der chip
intern mit 1MHz statt 8 MHz

von Andi666 (Gast)


Lesenswert?

mhh wo find ich die denn ? viellt. ne dumme frage ?

von Andi666 (Gast)


Angehängte Dateien:

Lesenswert?

meinst dieses Register ?

von Andi666 (Gast)


Lesenswert?

ich glaub dass iss bei Ponyprog das Bit OCDEN ich würd dass so
übersetzen Oszillator Clock divider enable ???? kann dass sein ?

von Andi666 (Gast)


Lesenswert?

Also ich hab dieses Bit jetzt mal in allen variationen getestet das geht
nicht

von Freudi (Gast)


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

von Andi666 (Gast)


Lesenswert?

ok ich teste das jetzt mal... schom am flashen....

von Andi666 (Gast)


Lesenswert?

ich lass im Tx Interrupt ne LED togglen... das funktioniert... was
könnte dass noch sein ?

von Andi666 (Gast)


Lesenswert?

ich sag mal soo... im Hyperterminal blinkt der cursur anders wenn ich
die verbindung herstelle, aber es kommt nichts an

von Sven (Gast)


Lesenswert?

Vergiss bitte mal ganz schnell das Hyperterminal
und google mal nach Bray-Terminal....

Ganz einfach zu bedienen und auch HEX Ausgabe der Zeichen......

von Sven (Gast)


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......

von Andi666 (Gast)


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 ....

von Andi666 (Gast)


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 ....

von peter dannegger (Gast)


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

von Andi666 (Gast)


Lesenswert?

aber warum funktioniert dass ganz dann in 2 verschiedenen ATMEGA8
schaltungen die ich auch "OHNE ext. Oszillator" aufgebaut habe?

von peter dannegger (Gast)


Lesenswert?

Weil "Glück gehabt" und "funktioniert immer" eben doch nicht das
gleiche bedeuten.

Niemand hat gesagt, es geht gar nicht.


Peter

von Andi666 (Gast)


Lesenswert?

kannst du mir dann gerade noch schnell die Fuse einstellungen für den
quarz mit 16Mhz und den 2 16pF sagen ?

von peter dannegger (Gast)


Lesenswert?

Größeres als den Mega16 habe ich leider noch nicht benötigt. Zum Mega128
kann ich daher nichts sagen.


Peter

von Andi666 (Gast)


Lesenswert?

welche FUSE bits muss ich denn setzen??? Trau mich nimmer hab dass schon
2mal falsch gemacht  und danach ging gar nix mehr

von Andi666 (Gast)


Lesenswert?

so hat alles soweit geklappt... bis auf den Uart da kommt immer noch nix
an

von Freudi (Gast)


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

von Andi666 (Gast)


Lesenswert?

hey Freudi dass mit den CKSEL kann nicht richtig sein, denn jetzt läuft
das teil langsamer ich seh dass an meiner Main Loop LED

von Freudi (Gast)


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

von Andi666 (Gast)


Lesenswert?

Das mit der Rx LED klappt jetzt und ich teste noch...

von Andi666 (Gast)


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.

von Andi666 (Gast)


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 ????

von Freudi (Gast)


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

von Andi666 (Gast)


Lesenswert?

nee RxD1 vom 128er geht zum TxD0 vom ATmega8 und TxD1 vom 128er geht zum
PC ich benutze WinXp und wenn ich den 8er an den pc anschließe gehts

von Freudi (Gast)


Lesenswert?

Ähm "Merkwürdig das"
Und wenn Du auf dem 128 auch TxD0/RxD0 nimmst, nur damit der Quelltext
völlig gleich ist. Ist wahrscheinlich belegt ?!?

Freudi

von ka-long (Gast)


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

von Andi666 (Gast)


Lesenswert?

ja beim 128er ist RxD0/ TxD0 Miso und mosi zum flashen deswegen...

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.