Forum: Mikrocontroller und Digitale Elektronik Zeiteinstellung am Attiny261A


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Berndt (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Hallo
versuche meine ersten Schritte mit einem kleinen Board mit dem Attny261A 
zu machen. Dazu verwende ich dieses kleine Programm um 2 LEDs blinken zu 
lassen:
1
#define F_CPU 16000000UL  // Angabe der Quarzfrequenz, wichtig für die Zeit
2
#include <util/delay.h>    // Einbindung Datei Pause
3
#include <avr/io.h>      // Einbindung Datei Ausgänge
4
5
int main(void)
6
  {
7
  DDRA=0b11000000;    // Port A als Ausgang definiert
8
  PORTA=0b11000000;
9
  while(1)        // Programmschleife
10
    {
11
    PORTA &= ~(1<<PA6);  // Schaltet Pin aus
12
    _delay_ms(500);    // Pause 500 ms
13
    PORTA |= (1<<PA6);  // Schaltet Pin ein
14
    _delay_ms(500);    // Pause 500 ms
15
    
16
    PORTA &= ~(1<<PA7);  // Schaltet Pin aus
17
    _delay_ms(500);    // Pause 500 ms
18
    PORTA |= (1<<PA7);  // Schaltet Pin ein
19
    _delay_ms(500);    // Pause 500 ms
20
    }
21
  }
Das Programm läuft auch. Nur die Zeit stimmt nicht. Verwende einen 16MHz 
Keramik Schwinger. Da ich Pausen von 500ms drin habe müstte es doch mit 
einer Frequenz von 1Hz blinken. Wenn ich richtig gezählt habe dauert es 
ca. 4 Sekunden je Pause. Leider sehe ich meinen Fehler nicht. Woran 
könnte es liegen?

LG Berndt

von Berndt (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Den Prozessor habe ich mit

EX 0xFF
HI 0xDF
LO 0x5E

eingestellt. Nach dem Datenblatt sollte er mit externen Schwinger >8MHz 
laufen.

von the_yrr (Gast)


Bewertung
0 lesenswert
nicht lesenswert
moin

du hast ckdiv8 fuse gesetzt, also wird der mit 1/8 der frequenz 
betrieben

von Stefan ⛄ F. (stefanus)


Bewertung
0 lesenswert
nicht lesenswert
Du hast die CLKDIV8 Fuse aktiv, dadurch ist die effektive Taktfrequenz 
nicht 16MHz sondern 2MHz.

Du kannst die Fuse aus schalten oder das per Software im CLKPR Register 
ändern.

von the_yrr (Gast)


Bewertung
0 lesenswert
nicht lesenswert
diese seite ist recht praktisch um die fuses richtig zu konfigurieren

http://www.engbedded.com/fusecalc

CKDIV8 ist standard gesetzt bei der auslieferung, deiner läuft grade mit 
2 MHz, einfach fuses neu und richtig setzen dann gehts.
ansonsten kann man auch den vorteiler für den takt im betrieb setzen, 
dafür guck ins datenblatt
6.3 System Clock Prescaler seite 31 bzw.
6.5.2 CLKPR – Clock Prescale Register eine seite weiter

von Alexander S. (esko) Benutzerseite


Bewertung
0 lesenswert
nicht lesenswert
Bei dem Code (und ohne CKDIV8) sind es 2 s oder 1/2 Hz.
1
    PORTA &= ~(1<<PA6);  // PA6 aus
2
    _delay_ms(500);
3
    PORTA |= (1<<PA6);   // PA6 ein
4
    _delay_ms(500);
5
    PORTA &= ~(1<<PA7);  // PA7 aus
6
    _delay_ms(500);
7
    PORTA |= (1<<PA7);   // PA7 ein
8
    _delay_ms(500);

Jede LED ist 3x500 ms an und 500 ms aus.

von Berndt (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Habe auf dieser Seite die Einstellung gesucht und natürlich das mit 
übernommen. Habe es ausgeschaltet und geht korrekt. Danke für eure Hilfe

LG Berndt

von the_yrr (Gast)


Bewertung
0 lesenswert
nicht lesenswert
andere lösung waäre noch richtige Frequenz im Programm angeben, also
#define F_CPU 16000000UL ändern zu
#define F_CPU  2000000UL

dann gehts auch genau so gut

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.