www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Problem atmega128


Autor: Andi666 (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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 ????

Autor: Ingo (Gast)
Datum:

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

Autor: Andi666 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
mhh wo find ich die denn ? viellt. ne dumme frage ?

Autor: Andi666 (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
meinst dieses Register ?

Autor: Andi666 (Gast)
Datum:

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

Autor: Andi666 (Gast)
Datum:

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

Autor: Freudi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Andi666 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ok ich teste das jetzt mal... schom am flashen....

Autor: Andi666 (Gast)
Datum:

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

Autor: Andi666 (Gast)
Datum:

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

Autor: Sven (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vergiss bitte mal ganz schnell das Hyperterminal
und google mal nach Bray-Terminal....

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

Autor: Sven (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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......

Autor: Andi666 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ....

Autor: Andi666 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ....

Autor: peter dannegger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Andi666 (Gast)
Datum:

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

Autor: peter dannegger (Gast)
Datum:

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

Niemand hat gesagt, es geht gar nicht.


Peter

Autor: Andi666 (Gast)
Datum:

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

Autor: peter dannegger (Gast)
Datum:

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


Peter

Autor: Andi666 (Gast)
Datum:

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

Autor: Andi666 (Gast)
Datum:

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

Autor: Freudi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Andi666 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Freudi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Andi666 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das mit der Rx LED klappt jetzt und ich teste noch...

Autor: Andi666 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Andi666 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ????

Autor: Freudi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Andi666 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Freudi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: ka-long (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Andi666 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ja beim 128er ist RxD0/ TxD0 Miso und mosi zum flashen deswegen...

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.