Forum: Mikrocontroller und Digitale Elektronik ATtiny26


von Tobias Paul (Gast)


Angehängte Dateien:

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.

von Tobias Paul (Gast)


Angehängte Dateien:

Lesenswert?

Hier noch die Beschaltung des tiny26.

von Werner B. (Gast)


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

von Tobias Paul (Gast)


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 ....

von Tobias Paul (Gast)


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.)

von Fasti (Gast)


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

von Tobias Paul (Gast)


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?

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
Noch kein Account? Hier anmelden.