Attiny45/85 38 KHz Signal erzeugen

OP #4933436
Lesenswert?

Hallo in die Runde,

aktuell benötige ich für ein Lichtschranken-Projekt ein einfaches 38 KHz 
Signal, welches einen IR-Emitter ansteuert. Zur Erzeugung möchte ich 
einen Attiny45 oder 85 verwenden. Eine Variante mit dem Arduino Nano 
(testweise für Empfänger) funktioniert bereits. Leider scheitert es 
momentan an der Umsetzung mit dem Attiny45/85... Andere Beiträge hier im 
Forum bzw. im Netz haben mir bisher nicht weitergeholfen.

Angesetzt habe ich mit einem Timer im CTC Mode. Wo liegt der Fehler bzw. 
was fehlt? Folgender Code bisher:

#define F_CPU 8000000UL

#include <avr/io.h>
#include <avr/interrupt.h>

int main (void)
{
  DDRB |= (1<<PB0);
  TCNT0 = 0;
  TCCR0A=0;
  TCCR0B=0;

  TCCR0A |= (1 << WGM01) | (1 << COM0A0);
  TCCR0B |= (1 << CS00);
  OCR0A=104;

        sei ();

  while(1){
    // nothing to do
  }
}

Danke für eure Hilfe!
Gast #4933540
Lesenswert?

Ist das deine gedachte Timer-Konfiguration?

WGM0x = ?   sieht aus wie 010 = CTC
COM0Ax = ?  sieht aus wie  01 = Toggle OC0A on Compare Match
CS0x = ?    sieht aus wie 001 = full Clock

Sollte auf den ersten Blick passen.

Wie sind die Clock-Einstellungen? Auf extern gefused und nix
dran? Hättest du in der Richtung GARNIX gemacht, sollten
4,8 kHz rauskommen. (CKDIV8)
OP #4933541
Lesenswert?

bernd schrieb:
> Das Licht einer IR LED kann man nicht sehen.
> Wie überprüfst du, das da nichts passiert?
> Wie groß ist der LED Vorwiderstand?

Dessen bin ich mir bewusst. Als Empfänger benutze ich einen TSSOP4838 
mit LED dahinter und Mikrocontroller. Beim Empfang von IR-Signalen (38 
KHz)  leuchtet die LED. Das funktioniert sowohl mit jeder Fernbedienung 
die ich hier habe, als auch mit einem IR Sender den ich mit dem Arduino 
testweise gebaut hatte. Die Arduino Lösung soll nun ein Attiny 
übernehmen.

Der Kollektor des BC337 hängt an +5 Volt. Die IR LED (TSAL 6200) ist mit 
einem 33 Ohm Widerstand am Emitter. An der Basis hängt ein 1 KOhm 
Widerstand. Die Basis geht zum PB0 des Attiny. Die Basis ist ohne 
Pull-Down Widerstand beschaltet.

Testweise hatte ich anstatt der IR Led eine normale sichtbare dran - da 
tat sich auch nix. Hab das ganze auf einem Breadboard aufgebaut.
#4933567
Lesenswert?

Hi

Tony S. schrieb:
> OCR0A=104;

Bei 8MHz komme ich auf gute 30kHz, versuch Mal 210d / 0xD2
Wobei die normale LED so oder so leuchten muß.

Läuft der ATtiny korrekt an?
Lass Mal in der While(1)-Schleife die anderen Pins an/ausschalten, ggf. 
kannst Du dort auch ein delay einsetzen (kA, ob Das den Interrupt 
stört), damit man das Geblinke der Kontroll-LEDs auch sieht.

MfG

PS:
CLKDIV8-Fuse setzt den internen Teiler :8 - somit läuft der ATtiny mit 
1MHz statt 8MHz.

Trotzdem muß die LED blinken, halt nur nicht in der richtigen 
Geschwindigkeit.

MfG²
Gast #4933577
Lesenswert?

Erster Test auf dem Breadboard:
Transistor abklemmen und eine sichtbare LED:
Anode über 1 kOhm direkt an PB0, Kathode an Masse.

Wenn sie leuchtet:
Sichtbare LED gegen IR-LED tauschen.
Sagt dann der IR-Empfänger (nahe der IR-LED) nix, hast du
keine 38 kHz. - Obwohl die in der Nähe des Empfängers auch
bei 38 +/- 2 kHz ansprechen. (CKDIV...4,8 kHz???)



Eine ordentliche LED-Ansteuerung wäre der zweite Schritt...
Gast #4933813
Lesenswert?

Häufig ist die Fehlerursache auch ganz banal eine falsche Pinbelegung 
des Transistors. Hast du ihn falsch herum gedreht? Häufig werden 
Abblock-Kondensatoren vergessen.

Zeige mal ein Foto vom Aufbau.
Gast #4933858
Lesenswert?

Peter D. schrieb:
> Tony S. schrieb:
>> Als Empfänger benutze ich einen TSSOP4838
>
> Der hat eine AGC, d.h. einen konstanten Träger kann man damit nicht
> erkennen. Du mußt die PWM pulsen.

Den TSSOP gibt es eh nicht. Es gibt den TSOP mit AGC für Fernbedienungen 
und den TSSP ohne AGC für Lichtschranken.
Gast #4933878
Lesenswert?

LED im Kollektor? da halten ich die Variante als Emitterfolger
(Kollektorschaltung) für zielführender. die Variante ist schneller, aber 
- ehrlich gesagt - auch noch nicht probiert, beide Varianten gegenüber 
zu stellen. Na jedenfalls wird der Transistor so nicht in die Sättigung 
getrieben.

schalte zum Test noch eine rote LED in Reihe

Aber:
> Jacko (Gast) schrieb:
> Eine ordentliche LED-Ansteuerung wäre der zweite Schritt...


StromTuner

StromTuner
OP #4943035
Lesenswert?

Hallo Leute,

entschuldigt die späte Antwort! Ich hatte jetzt die Gelegenheit weiter 
zu machen. Die Fuse CLKDIV8 hat weitergeholfen - Danke dafür :)

Jetzt liegt es aber noch an der Ausgangsstufe zum IR Emitter. Die 
Reichweite leidet darunter aktuell extrem.

Das IR-Signal geht aktuell über einen 4,7 KOhm Basiswiderstand an einen 
BC337. Die IR LED habe ich mit einem Vorwiderstand von 27 Ohm im 
Kollektor des BC337. Betriebsspannung liefern 3 AA Batterien.

Zum Vergleich: Auf dem Breadboard hatte ich testweise einen BC547 mit 1 
KOhm Basiswiderstand aufgebaut. Die Geschichte hatte wunderbar 
funktioniert. Auf Grund des "hohen" Stroms der IR LED soll aber nun ein 
BC337 eingesetzt werden.

Was sind eure Empfehlungen für die Ausgangsstufe und der Beschaltung des 
BC337?
Gast #4943094
Lesenswert?

Tony S. schrieb:
> funktioniert. Auf Grund des "hohen" Stroms der IR LED soll aber nun ein
> BC337 eingesetzt werden.

Was ist das für eine IR-LED? Wieviel Strom verträgt sie und wieviel 
Strom soll hindurch geschickt werden? Wie groß ist die Vorwärtsspannung 
Uf? Bei 3AA Betterien ogne Spannungsregler würde ich mit 5V Vcc rechnen.
OP #4943126
Lesenswert?

Frank M. schrieb:
> 4,7K sind zuviel. Nimm 1K. Hättest Du aber auch sehen können, wenn Du
> mal in den empfohlenen IRSND-Artikel reingeschaut hättest. ;-)

Mit 1K habe ich es ursprünglich probiert. Mir scheint es aber so, als ob 
der Transistor nicht in die Sättigung kommt bei permanent anliegendem 38 
KHz Signal. Messe ich über dem Kollektorpfad die Spannung (Vorwiderstand 
LED + TSAL 6200), dann messe ich rund 2 Volt...
#4943146
Lesenswert?

ändere mal

TCCR0B |= (1 << CS00);
OCR0A=104;

in
TCCR0B |= (1 << CS00);
TCCR0B |= (1 << CS02); (Prescaler 1024)
OCR0A=255;

Und schließe dann eine LED mit sichtbarem Licht an. Mit den 
Einstellungen kommst du auf Frequenzen die man mit dem Auge 
unterscheiden kann. Bei 8 MHz Grundtakt ist es ein Flimmern. Bei 1 MHz 
Grundtakt ist es ein Blinken. Wenn gar nichts passiert ist etwas anderes 
Grundlegendes falsch.
OP #4943233
Lesenswert?

Neue Erkenntnisse: Die Reichweite scheint in Ordnung zu sein, aber mit 
der Software nicht.

Im Attiny45 Sender mit der Ansteuerung wie hier bereits diskutiert und 
folgendem Code ist die Reichweite bei mehreren Metern. Jedoch ist es so, 
dass wenn ich das 38 KHz Signal permanent aussende, dass der Empfänger 
(TSOP4838) das Signal nur einmal erkennt. Halte ich die IR-Strecke kurz 
zu / unterbreche diese und nehme die Unterbrechung wieder heraus, 
erkennt der IR Empfänger wiederum einmal das Signal. Durch on / of 
schalten des Signals habe ich versucht dieses zu kompensieren. Dies 
funktioniert nur bedingt. Der Empfänger erkennt das Signal (LED togglet 
am Empfänger).

#define F_CPU 8000000UL

#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>

int main (void)
{
  DDRB |= (1<<PB0);
  TCNT0 = 0;
  TCCR0A=0;
  TCCR0B=0;

  TCCR0A |= (1 << WGM01) | (1 << COM0A0);
  TCCR0B |= (1 << CS00);
  OCR0A=104;
    sei ();

  while(1){

    TCCR0B &= ~(1 << CS00);
    _delay_ms(100);
    TCCR0B |= (1 << CS00);
    TCNT0 = 0;
    _delay_ms(10);

  }
}

Der Empfänger besteht ebenfalls aus einem Attiy45 und einem TSOP4838. 
Die Beschaltung ist gleich wie in diesem Beitrag: 
Beitrag "Re: Infrarot LED Lichtschranke"

Die Software dazu sieht aktuell so aus (ohne testweises toggeln der 
LED):

/*
 * IR_Receiver_Gateway.c
 *
 * Created: 12.03.2017 10:50:38
 * Author : Tony
 */

#include <avr/io.h>
#include <avr/interrupt.h>
#define F_CPU 8000000UL
#include <util/delay.h>

volatile int timerCount = 0;

int main(void)
{
  DDRB |= (1 << PB1);
  PORTB |= (1 << PB1);

  DDRB &= ~(1 << PB3);

  GIMSK = 1 << PCIE;
  PCMSK = 1 << PCINT0;
  PCMSK = 1 << PCINT3;

  TCCR0B = (1<<CS01)|(1<<CS00);
  TIMSK = 1 << TOIE0;

  sei();

    while (1)
    {
    }
}

ISR(PCINT0_vect) {

  TCNT0 = 0;
  TCNT1 = 0;
  PORTB &= ~(1 << PB1);
  //PORTB ^= (1 << PB1);
  timerCount = 0;

}

ISR(TIMER0_OVF_vect) {
  if(timerCount == 3){
    PORTB |= (1 << PB1);
    timerCount = 0;
  } else {
    timerCount++;
  }

}

Ziel ist es eine IR Lichtschranke zu bauen. Der Empfänger soll nix 
weiter machen, als bei anliegendem IR Signal vom Sender einen Low-Pegel 
auszugeben, bei Unterbrechung springt der Pegel auf High. Der Pegel wird 
dann weiterverarbeitet. Eine LED signalisiert am Empfänger die aktuelle 
Stellung des Ausgangs.

Lange Rede...Mein Ansatz am Empfänger (und Sender) scheint mir nicht 
praktikabel zu sein. Kann jemand weiterhelfen? Zur Anwendung kommt die 
Lichtschranke an der Ziellinie bei Sprints.
#4943249
Lesenswert?

@Tony S. (tooony)

>dass wenn ich das 38 KHz Signal permanent aussende, dass der Empfänger
>(TSOP4838) das Signal nur einmal erkennt.

Das ist der Sinn DIESES Empfängers!

>Ziel ist es eine IR Lichtschranke zu bauen. Der Empfänger soll nix
>weiter machen, als bei anliegendem IR Signal vom Sender einen Low-Pegel
>auszugeben, bei Unterbrechung springt der Pegel auf High. Der Pegel wird
>dann weiterverarbeitet. Eine LED signalisiert am Empfänger die aktuelle
>Stellung des Ausgangs.

Dann brauchst du einen anderen Empfänger, nämlich den hier!

https://www.mikrocontroller.net/topic/goto_post/4652837
#4943275
Lesenswert?

OP #4943336
Lesenswert?

Danke für eure Antworten. Bei TSSP4038 / TSOP 4038 hatte ich Tomaten auf 
den Augen...

Schalte ich die IR LED für 5 ms an und 10 ms kommt das gepulste Signal 
wunderbar am TSOP4838 an. Soweit erstmal gut. Von einer Lichtschranke 
ist das Ganze aber noch deutlich entfernt. Unterbreche ich den 
Lichtstrahl detektiert der Empfänger dennoch das Signal. Erst wenn ich 
die LED nahezu mit den Händen komplett zu halte, wird das Signal 
unterbrochen.

Hilft hier eine LED Optik oder gibt es noch andere Möglichkeiten?
#4943339
Lesenswert?

@ Tony S. (tooony)

>wunderbar am TSOP4838 an. Soweit erstmal gut. Von einer Lichtschranke
>ist das Ganze aber noch deutlich entfernt. Unterbreche ich den
>Lichtstrahl detektiert der Empfänger dennoch das Signal.

Wie sieht denn dein Aufbau aus? Abstand? LED-Treiber? Möglicherweise 
sieht dein Empfänger Reflektionen auf eine Wand oder so.
#4943355
Lesenswert?

@ Dieter F. (jim_quakenbush)

>Bezeichnung des Bauteils überlesen?

Nö, er testet das Ding jetzt mit einem modulierten Testsignal.

"Schalte ich die IR LED für 5 ms an und 10 ms kommt das gepulste Signal
wunderbar am TSOP4838 an."

Damit kann man auch eine Lichtschranke bauen, wenn gleich das nicht 
optimal ist. Für den TEST der Lichtunterbrechung reicht es allemal.
OP #4943369
Lesenswert?

Falk B. schrieb:
> Wie sieht denn dein Aufbau aus? Abstand? LED-Treiber? Möglicherweise
> sieht dein Empfänger Reflektionen auf eine Wand oder so.

Der Aufbau sieht so aus:

Sender: wie bereits hier beschrieben:

- Attiny45
- BC337 mit IR LED plus Vorwiderstand im Kollektor
- BC337 Basiswiederstand 1 KOhm

Empfänger:

- Schaltung analog hierzu: 
Beitrag "Re: Infrarot LED Lichtschranke"
- Attiny45

Von der Distanz her habe ich einen kurzen Abstand (ca. 0,5 Meter), als 
auch 5 bis 7 Meter versucht. Das Signal kommt immer gleich gut an, aber 
bei Unterbrechung des Lichtstrahls (Hand oder Körper dazwischen) wird 
dennoch alles Empfangen.
#4943378
Lesenswert?

@ Tony S. (tooony)

>- Attiny45
>- BC337 mit IR LED plus Vorwiderstand im Kollektor
>- BC337 Basiswiederstand 1 KOhm

Schon mal was von einem Schaltplan gehört?

>- Schaltung analog hierzu:
>Beitrag "Re: Infrarot LED Lichtschranke"
>- Attiny45

Und wie erkennst du das Empfangssignal? Mit der LED? Oder per Software 
im AVR? Die LED ist einfacher, auch wenn sie gepulst wird, das sieht man 
aber nicht bei 10ms Periodendauer.

>Von der Distanz her habe ich einen kurzen Abstand (ca. 0,5 Meter), als
>auch 5 bis 7 Meter versucht. Das Signal kommt immer gleich gut an, aber
>bei Unterbrechung des Lichtstrahls (Hand oder Körper dazwischen) wird
>dennoch alles Empfangen.

Kaum zu glauben. Ist dein Zimmer rundherum verspiegelt?
OP #4943437
Lesenswert?

Hier mal das aktuelle Schaltbild.

Erkannt wird das ganze im AVR. Die LED nutze ich aktuell zum Toggeln des 
Signals des was vom Empfänger reinkommt. Später soll es aber den Status 
der Lichtschranke anzeigen, sprich unterbrochen oder nicht unterbrochen. 
Ein Timer (aktuell testweise nicht in Verwendung) behandelt das IR 
Signal.

Sender:

#define F_CPU 8000000UL

#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>

int main (void)
{
  DDRB |= (1<<PB0);
  TCNT0 = 0;
  TCCR0A=0;
  TCCR0B=0;

  TCCR0A |= (1 << WGM01) | (1 << COM0A0);
  TCCR0B |= (1 << CS00);
  OCR0A=104;
    sei ();

  while(1){

    TCCR0B &= ~(1 << CS00);
    _delay_ms(10);

    TCCR0B |= (1 << CS00);
    TCNT0 = 0;
    _delay_ms(5);

  }
}


Empfänger:

#include <avr/io.h>
#include <avr/interrupt.h>
#define F_CPU 8000000UL
#include <util/delay.h>

volatile int timerCount = 0;

int main(void)
{
  DDRB |= (1 << PB1);
  PORTB |= (1 << PB1);

  DDRB &= ~(1 << PB3);

  GIMSK = 1 << PCIE;
  PCMSK = 1 << PCINT0;
  PCMSK = 1 << PCINT3;

  TCCR0B = (1<<CS01)|(1<<CS00);
  TIMSK = 1 << TOIE0;

  sei();

    while (1)
    {
    }
}

ISR(PCINT0_vect) {

  TCNT0 = 0;
  TCNT1 = 0;
  //PORTB &= ~(1 << PB1);
  PORTB ^= (1 << PB1);
  timerCount = 0;

}

ISR(TIMER0_OVF_vect) {
  // IR Toogle
  /*
  if(timerCount == 3){
    PORTB |= (1 << PB1);
    timerCount = 0;
  } else {
    timerCount++;
  }
  */

}
Angehängte Dateien:
(Firma: matzetronics) #4943447
Lesenswert?

Tony S. schrieb:
> Das Signal kommt immer gleich gut an, aber
> bei Unterbrechung des Lichtstrahls (Hand oder Körper dazwischen) wird
> dennoch alles Empfangen.

Bei IR Fernbedienungen (und dafür ist dein Empfänger eigentlich gedacht) 
ist es wünschenwert, das möglichst breit empfangen wird. Für deine 
Anwendung musst du also mit einem abschirmenden Röhrchen und/oder Optik 
dafür sorgen, das der Empfänger nur aus einem schmalen Kegel empfängt.
Gast #4943485
Lesenswert?

Matthias S. schrieb:
> einem abschirmenden Röhrchen und/oder Optik
> dafür sorgen, das der Empfänger nur aus einem schmalen Kegel empfängt.

Eine Optik ist da schon verbaut - damit großflächig empfangen wird.

Tony S. schrieb:
> Von der Distanz her habe ich einen kurzen Abstand (ca. 0,5 Meter), als
> auch 5 bis 7 Meter versucht. Das Signal kommt immer gleich gut an,

Ob das bei einem "Röhrchen" wohl auch so sein wird?
OP #4943677
Lesenswert?

Wenn die Rede von einem Röhrchen ist, meint ihr da irgendwas aus 
Kunststoff, oder viel mehr mit einer reflektierenden / spiegelnden 
Oberfläche?

Bei Conrad und Co findet man recht schnell LED Optik, z.B. mit 7° 
Winkel. Würde sowas genügen oder denkt ihr an was anderes?

https://www.conrad.de/de/led-reflektor-chrom-7-anzahl-leds-max-1-fuer-led-luxeon-rebel-dialight-lumidrives-opc1-1-col-sp-170206.html
#4943699
Lesenswert?

@Tony S. (tooony)

>Wenn die Rede von einem Röhrchen ist, meint ihr da irgendwas aus
>Kunststoff,

Ja, oder einfach aus Pappe etc.

> oder viel mehr mit einer reflektierenden / spiegelnden
>Oberfläche?

Nein.

>Bei Conrad und Co findet man recht schnell LED Optik, z.B. mit 7°
>Winkel. Würde sowas genügen oder denkt ihr an was anderes?

Braucht man nicht.
Gast #4943712
Lesenswert?

Schwere Geburt!

* CDIV8 nicht beachtet
* TSOPs wollen IR-Pulsketten, kein Dauerlicht sehen:
  Falsche Vermutung, IR-Power zu gering
  Großer Blödsinn, die Dinger sind sauempfindlich,
  werden aber in den meisten Geräten (optisch) stark bedämpft.
* Mit IR-Pulsen: Die Lichtschranke sieht keine Unterbrechung.
  Logisch, das kleinste 7 mal um irgendwelche Ecken
  reflektierte Signal von der IR-Diode wird noch empfangen!

Lösung: Bei so kleinen Entfernungen reicht es oft, die
IR-LED über 1 kOhm direkt vom µC-Port anzusteuern!

Mal sehn, was als Nächstes nicht beachtet wurde...
(Z.B. Die Lichtführung bei funktionierenden Lichtschranken...)
(Firma: matzetronics) #4944014
Lesenswert?

Dieter F. schrieb:
> Außerdem "bündelt" die "verbaute" (Standard-)Optik doch schon - oder?

Nein, wie du selber in deinem Beitrag geschrieben hast, ist die 
eingebaute Optik eher ein Weitwinkel. Wenn man nun davor eine 
Sammellinse setzt und z.B. mit einem Pappröhrchen Seitenlicht 
ausblendet, hat man die Charakteristik, die man für eine Lichtschranke 
braucht - das ist doch nun nicht so schwer zu verstehen. Evtl. reicht 
das schwarze Pappröhrchen auch alleine aus, das muss man ausprobieren.
OP #4947523
Lesenswert?

Hallo nochmal in die Runde,

mein aktueller Stand sieht so, dass es mit einem moduliertem Signal 
grundlegend funktioniert, jedoch noch nicht zufriedenstellend.

Vorweg: meine Räumlichkeiten zu Hause scheinen stark zu reflektieren, 
sodass oftmals zu viel ankommt und die Schranke nicht reagiert (auch 
wenn ich Sender und Empfänger in entgegengesetzte Richtungen schauen 
lasse). Ich hatte die Gelegenheit in anderen Räumlichkeiten das ganze zu 
testen, da funktioniert es wesentlich besser.

Durch spielen mit den Timings habe ich den folgenden Stand. Dazu die 
Frage: Ist das so praktikabel oder bin ich (von der Programmierung her) 
auf dem falschen Weg.

Sender:
1
#define F_CPU 8000000UL
2

3
#include <avr/io.h>
4
#include <avr/interrupt.h>
5
#include <util/delay.h>
6

7
int main (void)
8
{
9
  DDRB |= (1<<PB0);
10
  TCNT0 = 0;
11
  TCCR0A=0;
12
  TCCR0B=0;
13
  
14
  TCCR0A |= (1 << WGM01) | (1 << COM0A0);
15
  TCCR0B |= (1 << CS00);
16
  OCR0A=104;
17
  
18
  uint16_t counter = 0;
19
  DDRB |= (1<<PB1);
20
  PORTB &= ~(1 << PB1);
21
  
22
  sei ();
23

24
  while(1){    
25
    
26
    TCCR0B &= ~(1 << CS00);
27
    _delay_ms(17);
28
    
29
    TCCR0B |= (1 << CS00);
30
    TCNT0 = 0;
31
    _delay_ms(3);
32
    
33
    if(counter == 50) {
34
      counter = 0;
35
      PORTB ^= (1 << PB1);
36
    }  else {
37
      counter++;
38
    }
39
    
40
  }
41
}
Empfänger:
1
#include <avr/io.h>
2
#include <avr/interrupt.h>
3
#define F_CPU 8000000UL
4
#include <util/delay.h>
5

6
volatile int timerCount = 0;
7

8
int main(void)
9
{
10
  DDRB |= (1 << PB1);
11
  DDRB |= (1 << PB4);
12
  PORTB |= (1 << PB1); //LED Off
13
  PORTB |= (1 << PB4); // LVL Low
14
  
15
  DDRB &= ~(1 << PB3);  
16
  
17
  GIMSK = 1 << PCIE;
18
  PCMSK = 1 << PCINT0;
19
  PCMSK = 1 << PCINT3;
20
  
21
  TCCR0B = (1<<CS02);//|(1<<CS00);
22
  TIMSK = 1 << TOIE0;
23

24
  sei();
25
  
26
    while (1) 
27
    {
28
    }
29
}
30

31
ISR(PCINT0_vect) {
32
  
33
  TCNT0 = 0;
34
  TCNT1 = 0;
35
  PORTB &= ~(1 << PB1);
36
  PORTB &= ~(1 << PB4);
37
  timerCount = 0;  
38
  
39
}
40

41
ISR(TIMER0_OVF_vect) {  // IR Toogle 
42
  
43
  if(timerCount == 3){
44
    PORTB |= (1 << PB1);
45
    PORTB |= (1 << PB4);
46
    timerCount = 0;
47
  } else {
48
    timerCount++;
49
  }
50
  
51
  
52
}
-------------------------
Edit Mod: Code in
1
 [c] .... [/c]
 eingefasst. Bitte daran halten. So wird das wesentlich lesbarer.
(Firma: matzetronics) #4948585
Lesenswert?

Dennis K. schrieb:
> Sonst macht der PortPin doch überhaupt nicht was er soll....

Doch, macht er, denn das ist ja eine Hardware PWM, die sonst keinerlei 
Softwareunterstützung mehr braucht, wenn sie einmal läuft. Dafür ist nur 
nötig, das du die COM0An Bits richtig setzt und OC0A als Ausgang gesetzt 
wurde.
OC0A toggelt dann mit der CTC Frequenz.

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