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 ????
Hast Du daran gedacht die ClkDiv8 Fuse zu disablen? Sonst läuft der chip intern mit 1MHz statt 8 MHz
ich glaub dass iss bei Ponyprog das Bit OCDEN ich würd dass so übersetzen Oszillator Clock divider enable ???? kann dass sein ?
Also ich hab dieses Bit jetzt mal in allen variationen getestet das geht nicht
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
ich sag mal soo... im Hyperterminal blinkt der cursur anders wenn ich die verbindung herstelle, aber es kommt nichts an
Vergiss bitte mal ganz schnell das Hyperterminal und google mal nach Bray-Terminal.... Ganz einfach zu bedienen und auch HEX Ausgabe der Zeichen......
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......
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 ....
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 ....
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
aber warum funktioniert dass ganz dann in 2 verschiedenen ATMEGA8 schaltungen die ich auch "OHNE ext. Oszillator" aufgebaut habe?
Weil "Glück gehabt" und "funktioniert immer" eben doch nicht das gleiche bedeuten. Niemand hat gesagt, es geht gar nicht. Peter
kannst du mir dann gerade noch schnell die Fuse einstellungen für den quarz mit 16Mhz und den 2 16pF sagen ?
Größeres als den Mega16 habe ich leider noch nicht benötigt. Zum Mega128 kann ich daher nichts sagen. Peter
welche FUSE bits muss ich denn setzen??? Trau mich nimmer hab dass schon 2mal falsch gemacht und danach ging gar nix mehr
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
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
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
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.
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 ????
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
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
Ä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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.