Hallo Forum,
Ich will den Port B meines AT Mega32 toggeln lassen.
Leider funktioniert dies nicht.
Kann mir jemand sagen ob der Code richtig ist?
Nicht dass mein Programmer ein Fehler hat
vielen Dank
> #define F_CPU 16000000UL //Taktfrequenz 1MHz
Hat es vielleicht mit dieser Diskrepanz zu tun, bzw. mit welchem Takt
läuft der Controller wirklich und was ist an PB0 zu sehen?
Spielt aber alles keine Rolle, wenn der µC nicht wie in F_CPU angegeben
mit 16Mhz läuft sondern nur mit 1MHz, wie es im Kommentar steht.
Nein. Der Mega läuft nicht automatisch mit 16Mhz, nur weil du bei F_CPU
das so hinschreibst. F_CPU ist die Information für den Compiler aber
was du da hinschreibst interessiert den eigentlich IC nicht die Bohne.
Der läuft so schnell, wie er eben eingestellt ist.
Allerdings führt eine Falschangabe bei F_CPU dann dazu, dass die Zeiten
bei _delay_ms nicht stimmen. Wenn dein Mega also tatsächlich noch immer
mit 1Mhz läuft, du deinen Compiler aber mit den 16Mhz angelogen hast,
dannn dauern die _delay_ms jetzt alls 16 mal so lange. D.h deine LED
blinkt nicht im Sekundentakt, sondern nur alle 16 Sekunden. Und das ist
eine lange Zeit, bei der man schon mal die Geduld verlieren kann und
'funktioniert nicht' diagnostiziert.
Ja, der Controller läuft definitiv mit 16Mhz, da war der Kommentar
falsch.
Auch die 16 Sekunden warten sind somit hinfällig.
vielleicht dcch einfach mal abwarten und Kaffee trinken.
Ich wollte nur auf Nummer sicher gehen, damit ich mich nicht vermesse,
deshalb habe ich alle Pinss toggeln lassen.
aber das Programm scheint ja richtig zu sein.
vielleicht nochmals ein Käffchen trinken :-)
Karl H. schrieb:> Der Mega läuft nicht automatisch mit 16Mhz, nur weil du bei F_CPU> das so hinschreibst.
Es wäre nicht schlecht, wenn man die Fuse-Bits, wie in BASCOM möglich,
mit dem $PROG-Kommando im Quelltext einstellen könnte.
Ja, ich weiß: hier geht es um "C". Aber man sieht manchmal Sachen, die
in anderen Sprachen (und Entwicklungsoberflächen) schöner sind.
mfG Paul
Kann es bei den heutigen IDEs noch vorkommen, dass das nicht für einen
ATmega32 übersetzt wurde?
> der Controller läuft definitiv mit 16 MHz
Also Quarz oder externer Takt und die Low-fuse entsprechend eingestellt?
Ja die Betriebsspannung ist bei 4,5V
Ich glaube das Problem liegt wo ganz wo anders.
Ich benutze den AVR MK2 Programmer, den steuere ich unter Ubuntu an.
für das vorherige Projekt hatte ich die richtige .elf Datei. Bei neuen
Projekt natürlich nicht mehr.
Kann mir jemand sagen wie ich diese unter Ubuntu anpassen kann?
vielen Dank im voraus
Stefanie schrieb:> Ja die Betriebsspannung ist bei 4,5V> Ich glaube das Problem liegt wo ganz wo anders.> Ich benutze den AVR MK2 Programmer, den steuere ich unter Ubuntu an.> für das vorherige Projekt hatte ich die richtige .elf Datei.
Die interessiert nicht.
Letzten Endes kommt aus dem ganzen Compilierprozess eine HEX-Datei raus.
Und die wird gebrannt.
> Bei neuen> Projekt natürlich nicht mehr.> Kann mir jemand sagen wie ich diese unter Ubuntu anpassen kann?
Kopfkratz.
Du hast doch irgendein Brennprogramm. Und dem kannst du angeben, wie die
HEX-Datei heisst, die du brennen willst und auf welchem Verzeichnis sie
ist.
Wo also liegt das Problem?
Stefanie schrieb:> d.h. ich benötige gar keine .elf Datei?> Ich programmiere unter Eclipse und Ubuntu
Autsch. Bitte, lern die Grundlagen. Sonst wird das nichts.
Hier gehts los: AVR-GCC-Tutorial
@Karl Heinz:
Speziell unter Linux wird sehr wahrscheinlich avrdude verwendet.
Und der kann seit einigen Releases das .elf Binary direkt flashen.
Die Extraktion des Flash-Segments und Umwandlung nach Intel HEX
ist nicht mehr zwingend notwendig.
Axel S. schrieb:> Speziell unter Linux wird sehr wahrscheinlich avrdude verwendet.> Und der kann seit einigen Releases das .elf Binary direkt flashen.
Ah. Danke. Das wusste ich nicht.
Hatte mich insgeheim ohnehin schon gewundert, warum das Brennprogramm
anscheinend die ELF Datei akzeptiert und keinen Fehler meldet. Jetzt ist
klar warum.
Bleibt aber immer noch die Frage, warum sie dann nicht weiss welche
Datei sie flasht und ob das die richtige ist.
Paul B. schrieb:> Es wäre nicht schlecht, wenn man die Fuse-Bits, wie in BASCOM möglich,> mit dem $PROG-Kommando im Quelltext einstellen könnte.>> Ja, ich weiß: hier geht es um "C". Aber man sieht manchmal Sachen, die> in anderen Sprachen (und Entwicklungsoberflächen) schöner sind.
Auch beim GCC kann man die Fuses in den Quelltext schreiben.
z.B. so:
Also bei Eclipse mit Plugin und avrdude erzeugt ja normalerweise das
plugin selber den richtigen aufruf für "den dude".
Wie hast du das denn konfiguriert ?