Frequnzgenerator | IR-Fernbedinung

Gast #875317
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?
Gast #876269
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]
1
#include <avr/io.h>
2
#include <avr/interrupt.h>
3

4
ISR(TIMER0_OVF_vect) {
5
  PORTB ^= (1 << PB4);
6
  //TCNT0 = 231;
7
}
8

9

10

11

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

16
  //TCCR0B |= (0 << CS02) | (0 << CS01) | (0 << CS00);   //Timer abgeschalten
17
  //TCCR0B |= (0 << CS02) | (0 << CS01) | (1 << CS00);   //Prescaler auf 0 stellen / CPU Takt
18
  //TCCR0B |= (0 << CS02) | (1 << CS01) | (0 << CS00);   //Prescaler auf 8 stellen
19
  //TCCR0B |= (0 << CS02) | (1 << CS01) | (1 << CS00);   //Prescaler auf 64 stellen
20
  if(PINB & (1 << PINB3)) {
21
    TCCR0B |= (1 << CS02) | (0 << CS01) | (0 << CS00);   //Prescaler auf 256 stellen  |16
22
  } else {
23
    TCCR0B |= (1 << CS02) | (0 << CS01) | (1 << CS00);   //Prescaler auf 1024 stellen |4
24
  }
25

26
  TIMSK  |= (1 << TOIE0);
27

28
  sei(); // Interrupts einschalten
29

30
  for(;;); //ever
31
  return 0;
32
}
Gast #876398
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?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren