ATtiny26

Gast #163646
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
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
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
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
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
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

Eine eigene Frage? Dieser Thread ist über 21 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.