Hallo Leute, ich bin ein ziemlicher Anfänger was µC betrifft. Meine Entwicklungsumgebung besteht aus einem Laptop, einem Atmel AVR-ISP Programmer, einer Testplatine für den ATtiny26 und WinAVR. Leider hab ich ein paar Probleme damit. 1. Der "delay" Befehl Bei internem RC-Oscillator (1MHz) sind die Zeiten korrekt, benutze ich aber einen externen Quarz (8MHz)und aktiviere das entsprechende Fusebit, dann läuft das ganze schneller ab. Egal ob ich 1MHz oder 8MHz im Makefile einstelle, es verändert sich nichts. 2. Pin Change Interrupt PORTA hab ich über DDRA = 0xf0 zur hälfte in Eingänge und Ausgänge geteilt. Wenn ich jetzt ein simples Programm ausführe, (siehe Anhang) und einen Pin auf HIGH schalte spring der µC sofort wieder in die erste Programmzeile, obwohl ich keinen Interrupt programmiert hab.
Mache nach der änderung im makefile erst einmal der reihe nach 1. make clean - Löscht alle erzeugten objekt files in welchen noch bezüge auf die 1MHz stehen könnten. 2. make all - kompiliert alles neu. 3. programm auf den tiny26 raufschieben. good luck Werner
Als ich zum ersten Mal den ATtiny26 programmiert habe, habe ich zwar im Makefile F_CPU 8000000UL eingetragen, hatte aber nicht daran gedacht, das man noch ein entsprechendes Fusebit setzen muss, da sonst der interne Oscillator verwendet wird. Also im Makefile stand 8 MHz, der µC lief aber mit 1 MHz, trotzdem stimmten die Zeiten. Wenn ich jetzt das Fusebit auf ext. Oscillator umstelle, dann läuft das ganze Programm viel schneller ab, was die _delay_ms () - Befehle betrifft. Eigendlich müsste es aber erst jetzt korrekt sein, da Fusebit 8 MHz, und Makefile 8 MHz. Noch eine Frage zum Fusebit: Ich verwende einen externen 8 MHz Quarz der zwischen XTAL1 und XTAL2 und mit je 15pF gegen GND geschaltet ist. Was für ein Fusebit muss ich denn dann einstellen? normal doch: ext Crystal High Frequency ....
Kann es sein, dass die delay_ms() Funktion von WinAVR nur bei einer Taktfrequenz von 1 MHz funktioniert? Desweiteren hab ich gelesen, dass die Funktion F_CPU nur rein informativen Wert hat und der Takt nur über die Fusebits eingestellt werden kann. Dann noch zu dem seltsamen RESET bei Spannungsänderung an den Eingangspins. Kann das evt. an dem RC-Glied liegen, das eigendlich ein Prellen verhinden soll? (Schaltplan siehe weiter oben.)
Hi! Also wenn ich nicht recht irre wird genau das dein Fehler sein. Woher soll den der Compiler wissen welchen Quarz du an deinem AVR hast, wenn du ihm nicht die Frequenz mittels F_CPU mitteilst? Schliesslich braucht er ja einen Wert um die Millisekunden aus dem CPU-Takt zu errechnen. mfg Fasti
Hab grad mal den µC am Oszi angeschlossen um die delay_Zeiten zu messen. ... for (;;) { PORTA = 0xf0; _delay_ms (1); PORTA = 0x00; } ... Es ist dem µC sowas von egal was ich bei F_CPU hinschreibe. Den Takt kann ich nur über die Fusebits veränden, und somit auch die Zeiten. Aber 1 ms soll 1 ms bleiben, egal ob 1 MHz, 4 MHz oder 8 MHz. Woran könnte dies liegen?
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.