www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Blinkende LED


Autor: AVR Anfänger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habe gerade mein erstes Programm auf einem ATtiny25 zum laufen 
gebracht:
#include <avr/io.h>

int main(void)
{
  unsigned long int n = 0;
  DDRB |= 0x04;
  PORTB |= 0x04;
  while(1)
  {
    n++;
    if(n & 0x40000) PORTB |= (1<<2);
    else PORTB &= ~(1<<2);
  }
}
Das kann aber so nicht der Weisheit letzter Schluss sein, das müsste 
doch mit Timerinterrupt auch gehen!

Nur habe ich absolut keine Ahnung wie ich das in C programmieren 
könnte.
Kann mir das mal jemand zeigen?
Ich weiss, solche blöden Anfängerfragen nerven den einen oder anderen.
Bitte nicht hauen  :-)

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: AVR Anfänger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sorry, so schlau bin ich noch nicht,
hat mal jemand einen Code-Schnipsel, wie ich den Timer auf 1 Sekunde 
setzen kann und dann Interrupt-routine.

Autor: Link zu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Sorry, so schlau bin ich noch nicht,
Dann lese den Link und werde es. ;-)
> hat mal jemand einen Code-Schnipsel, wie ich den Timer auf 1 Sekunde
> setzen kann und dann Interrupt-routine.
Man hat dir den Weg gezeigt, gehe ihn nun bitte. Alles andere wäre 
sinnlos.

Autor: AVR Anfänger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Shit, keiner hilft einem!

Autor: MeinerEiner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Weil in dem Link alles bereits drinsteht. Ob du das da im Link liest 
oder hier, bleibt sich vom Informationsgehalt her gleich.

Lesen musste schon selber. Vorbeikommen und dir das Ding programmieren 
wird niemand.

Autor: Stephan Henning (stephan-)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Interruproutine schreiben
Main schreiben
Prescaler ausrechnen
Timer initialisieren
Interruptregister setzen
Timer starten und zuschauen

so ganz grob.

Autor: AVR Anfänger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habe dieses jetzt zusammengestoppelt:
  TCCR1 = 0b00001110;  // Prescaler = CK / 8192
  TIMSK |= (1 << TOIE1);  // Timer1 Overflow Interrupt Enable
  sei();      // Enable Interrrupt







ISR(TIMER1_OVF_vect)
{
  PORTB ^= (1 << PORTB4); // Led an PB4 toggeln
}
Seltsam, es funktioniert, ich sollte mich freuen...
Aber ist es so auch OK?
Oder hab ich was vergessen?

Autor: Vlad Tepesch (vlad_tepesch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
man kann das ganze noch optimieren:
ISR(TIMER1_OVF_vect)
{
  PINB = (1 << PIN4); // Led an PB4 toggeln
}
edit:
das klappt nur bei den neueren AVRs

Autor: AVR Anfänger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vlad Tepesch schrieb:
> das klappt nur bei den neueren AVRs

Ist ATtiny25 ein neuerer AVR?
Anscheinend, den
PINB = (1 << PIN4); // Led an PB4 toggeln
läßt die LED an PB4 blinken.
Das Datenblatt der ATtiny25 sagt:
Writing a logic one to PINxn toggles the value of PORTxn, independent on 
the value of DDRxn.
Note that the SBI instruction can be used to toggle one single bit in a 
port.
staun(Bauklötze);

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]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [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.