Hallo, ich habe hier ein Olimex Protoboard mit einem MEGA 16 und möchte die UART zum Laufen bringen. Dazu nutze ich wie bisher die Library von P. Fleury. Da ich das AVR Studio 6 ezum ersten mal nutze, habe ich es mit einem kleinen Testprogramm versucht (s.u.). Das seltsame ist jetzt: Beim AVR Studio 4 läuft es, wenn ich den Code mit Copy & Paste in das Studio 6 kopiere, läuft es nicht mehr. Also der Code wird einwandfrei compiliert, aber sobald ich das Programm in den AVR lade tut sich am Terminalprogramm gar nichts mehr. Woran kann das liegen ? Irgendwelche Compilerflags ? Gruß Karlheinz #define _AVR_ATmega16_ 1 #ifndef F_CPU #define F_CPU 8000000 #endif #include <stdio.h> #include "avr/io.h" #include "uart.h" #define UART_BAUD_RATE 9600 int main() { uart_init( UART_BAUD_SELECT(UART_BAUD_RATE,F_CPU) ); while (1) { uart_puts("Test\n\r"); } return 0; }
eventuell ist ja #ifndef F_CPU schon anders im 4er oder 6er definiert. lass das mal weg und schreibe nur #define F_CPU 8000000 (oder noch besser, lass es komplett weg. Dann kommt eine Warnung)
Karlheinz Druschel schrieb: > #define _AVR_ATmega16_ 1 Die Zeile lass mal lieber weg. Sollte es dann in der 4er-Version nicht mehr funktionieren, ist etwas grundlegendes mit deinen Projekteinstellungen oder der Installation nicht in Ordnung. > #ifndef F_CPU > #define F_CPU 8000000 > #endif Das ist eine leider unausrottbare Unsitte. Diese Zeilen nutzen gar nichts, sondern setzen dir nur unbemerkt ein nach Murphy garantiert falsches F_CPU. Lass das einfach weg. F_CPU gehört an einer zentralen Stelle im Projekt gesetzt, beim Studio in den Projektsettings. Solltest du das mal vergessen, dann ist das Programm nicht mehr kompilierbar, und der Compiler zeigt das durch seine Fehlermeldungen. > #include <stdio.h> > #include "avr/io.h" > #include "uart.h" > > #define UART_BAUD_RATE 9600 > > int main() > { > uart_init( UART_BAUD_SELECT(UART_BAUD_RATE,F_CPU) ); > > while (1) > { > uart_puts("Test\n\r"); > } > return 0; > } Das sieht soweit in Ordnung aus. Oliver
Karlheinz Druschel schrieb: > #define _AVR_ATmega16_ 1 ? Wozu das hier? Wenn das Projekt richtig aufgesetzt ist, dann kommt das entsprechende µC-define aus der IDE > > #ifndef F_CPU > #define F_CPU 8000000 > #endif Nimm da mal den #ifndef raus. Ich halte die ehrlich gesagt für keine gute Idee. Entweder man stellt den Wert für F_CPU in der IDE ein oder im Source Code. Aber nicht beides. Wenn in beiden (Programm und IDE) eine Definition für F_CPU vorliegt, dann soll das ruhig ein Fehler sein, der behoben werden muss. Denn über kurz oder lang kennst sich nämlich kein Mensch mehr aus, was denn jetzt eigentlich benutzt wird. Verschlimmert wird das nur dadurch, dass im Programm ein F_CPU definiert wird, wenn von der IDE nichts kommt. Denn oft genug stimmen dann die benutzten Werte quer über mehrere Source Code Files nicht zusammen. Idealerweise wird der Wert für F_CPU in der IDE eingestellt.
Mit euren Bemerkungen habt ihr sicher recht, und ich sehe sie als lehrreich an. Bloß habe ich beim 6er Studio nichts gefunden, wo ich die Taktfrequenz über die IDE vorgeben kann (beim 4er geht das ja). Die Ursache hier war der fehlende sei(), die Bibliothek nutzt Interrupts :-) Trotzdem Danke
Karlheinz Druschel schrieb: > Die Ursache hier war der fehlende sei(), die Bibliothek nutzt Interrupts > :-) dann kann es aber auch nicht mit der 4er funktioniert haben.
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.