mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Frequnzgenerator | IR-Fernbedinung


Autor: Christian R. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich will mir eine IR-Fernbedienung nachbauen leider keine RC5. Die 
Datenblöcke habe ich hinbekommen auch mit den Zeiten, habe also eine LED 
für die gliche Zeit Eingeschalten nun ist mein Problem das ich diese 
Schaltzeiten eigentlich nur ein Fenster für das Trägersignal sind aber 
wie kann ich diese Trägerfrequenz erzeugen. Mir würde es zunächst 
reichen das Trägersignal zu erzeugen um die Fensterzeiten würde ich mich 
im Nachhinein kümmern.
Mein Versuch mit Timer0 und Interrupt in C hatten keinen erfolg (TCCR0 
nicht bekannt) [ATTINY2313].

Kann mir da einer Helfen einen Frequenzgenerator in C zu schreiben?

Autor: Michael U. (amiga)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

schonmal ins Datenblatt des Tiny2313 geschaut, wie die Register beim 
Timer0 heißen?
Da gibt es 2: TCCR0A und TCCR0B

Ich hoffe jetzt mal, C kennt die auch unter dem Namen. ;)

Gruß aus Berlin
Michael

Autor: Christian R. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke, jetzt kennt er zwar TCCR0A aber mit
ISR(TIMER0_OVFA_vect)

kann er nichts anfangen.

Autor: Tip (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der IRQ, den Du nutzen willst gibt es auch nicht.
Ich vermute du brauchst TIMER0_OVF_vect.
Außerdem mußt Du

#include avr/interrupt.h

oben in der C-Datei stehen haben.

Siehe auch hier:
http://www.nongnu.org/avr-libc/user-manual/group__...

Autor: Christian R. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn ich richtig aufgepasst habe dann errechnet sie die Blinkfrequenz 
für Timer0 8bit OVF alle 256  doch so

(F_CPU / Prescaler) / OVF
(8MHz / 1024) / 256 = 30,52

bedeutet also das der Controller  30-mal in der Sekunde den Port an bzw. 
ausschaltet wenn ich mir das aber am Oszi ansehe braucht er 250ms um den 
Port umzuschalten kommt also gerade mal auf 4-mal in der Sekunde das der 
Port an bzw. ausgeschalten wird.

Habe ich da etwas nicht richtig verstanden oder ist da ein 
Programmfehler?


[ATtiny2313 FUSE: 0xDF64]
#include <avr/io.h>
#include <avr/interrupt.h>

ISR(TIMER0_OVF_vect) {
  PORTB ^= (1 << PB4);
  //TCNT0 = 231;
}




int main(void) {
  DDRB = (1 << PB4);                  // PB4 als Ausgang schalten
  PORTB &= ~(1 << PB4);                // Alle Ausgang auf 0 schalten

  //TCCR0B |= (0 << CS02) | (0 << CS01) | (0 << CS00);   //Timer abgeschalten
  //TCCR0B |= (0 << CS02) | (0 << CS01) | (1 << CS00);   //Prescaler auf 0 stellen / CPU Takt
  //TCCR0B |= (0 << CS02) | (1 << CS01) | (0 << CS00);   //Prescaler auf 8 stellen
  //TCCR0B |= (0 << CS02) | (1 << CS01) | (1 << CS00);   //Prescaler auf 64 stellen
  if(PINB & (1 << PINB3)) {
    TCCR0B |= (1 << CS02) | (0 << CS01) | (0 << CS00);   //Prescaler auf 256 stellen  |16
  } else {
    TCCR0B |= (1 << CS02) | (0 << CS01) | (1 << CS00);   //Prescaler auf 1024 stellen |4
  }

  TIMSK  |= (1 << TOIE0);

  sei(); // Interrupts einschalten

  for(;;); //ever
  return 0;
}

Autor: Michael U. (amiga)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe die Fuse-Bits jetzt nicht auseinandergenommen, aber Du bist 
sicher, daß er so mit 8MHz läuft?

Ein Tiny2313 im Lieferzustand läuft mit 1MHz, dann würde es ja stimmen.

Gruß aus Berlin
Michael

Autor: Christian R. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Laut AVR-OSP II steht er auf 8MHz Int RC (default) und dieses Programm
hat für intern nur 4MHz und 128kHz.

Apropos 128kHz, habe gestern mal einen anderen Tiny auf 128kHz gestellt 
der blinkt jetzt auch seeehr langsam aber ich kann ihn nicht mehr 
programmieren?! Wie geht das eigentlich ist der jetzt zu langsam für 
meine ISP?

Autor: Hauke Radtki (lafkaschar) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
schau dir mal das clkdiv8 fuse an, das sollte alle fragen beantworten ;)

Autor: Christian R. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und was ist "clkdiv8" ?

Autor: Michael U. (amiga)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Datenblatt Tiny2313 Seite 31 letzter Abschnitt...

Die CDIV8 Fuse ist ab Werk programmiert und der Takt wird durch 8 
geteilt, das ergibt dann 1MHz wenn der interne RC-Takt auf 8MHz steht 
(auch ab Werk).

Gruß aus Berlin
Michael

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.