ATtiny26

Gast #163646
Lesenswert?
• ▲
▼
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.
Angehängte Dateien:
Gast #163648
Lesenswert?
• ▲
▼
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
Gast #163649
Lesenswert?
• ▲
▼
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 ....
Gast #163650
Lesenswert?
• ▲
▼
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.)
Gast #163651
Lesenswert?
• ▲
▼
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
Gast #163652
Lesenswert?
• ▲
▼
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?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren