PWM an PB1(OC1A) nicht veränderbar

Gast #3105193
Lesenswert?

Hallo habe folgendes Prgrammm gestestet
an PB1(OC1A) soll der Ausgang sein
an PB0+PB2 hängen Taster nach GND.

Am Ausgang kommt zwar ein ca. 13kHz Signal aber ich kann keine Regelung 
vornehmen wo hängts.....?

Alles was mir auffällt kann nur OCR1A nutzen da compiler bei OC1A 
meckert.

hier der code :
1
#include <avr/io.h>
2
#include <avr/interrupt.h>
3
#define F_CPU 8000000UL
4
#include <util/delay.h>
5

6

7

8
int main()
9
{
10
  // OC1A => PB1 Ausgang
11
  DDRB |= (1<<PORTB1);  //Ausgang   DDRB &= ~(1<<PORTB0);  //  Eingang Tater auf GND
12
  DDRB &= ~(1<<PORTB2);  //  Eingang Taster auf GND
13
  PORTB |= (1<<PORTB0) | (1<<PORTB2); // an S1 und S3 Taster PUL UP Widerstände
14
    
15
  // PWM Konfig
16
  TCCR1A |= (1<<WGM10); //fast PWM 8-Bit
17
  TCCR1B |= (1<<WGM12);
18
  TCCR1B |= (1<<CS12);  // Prescaler 256
19
  TCCR1A |= (1<<COM1A1);  //nichtinvertierender PWM Modus
20
  OCR1A = 0; //LED aus;
21
  sei();
22
  
23
  while(1)   
24
  {  // ******* Tatster 1 (LED heller) ************
25
    if (!(PINB & (PINB0)))    
26
    {
27
      if(OCR1A= 255)  // wenn Maxwert noch nicht erreicht 
28
      OCR1A++;    // verbreitere die Impulsbreite
29
      _delay_ms(15);
30
    }
31
    
32
    //******* TASTER 2 (LED dunkler) *************
33
    if (!(PINB & (PINB2)))
34
    {
35
      if(OCR1A > 0)  // wenn Minimalwert noch nicht erreicht
36
      OCR1A--;    // verbreitere die Impulsbreite
37
      _delay_ms(15);
38
    }
39
  }   
40
}
#3105267
Lesenswert?

>    if (!(PINB & (PINB0)))

    if (!(PINB & (1<<PINB0)))


Das steckt doch alles voller Primtivfehler.
Dürfte ich vorschlagen, dass du dir selber mal eine Strategie 
zurechtlegst, um Fehler zu suchen und zu finden anstatt einfach 
dahinzutippen und wenns nicht geht, dann sofort das Forum zu befragen?

Fehler zu machen ist ok. Das gehört dazu.
Aber genauso gehört es dazu, dass man lernt seine eigenen Fehler zu 
finden. Und das lernt man nicht ohne Übung oder wenn einem die anderen 
alles vorbeten.
Beides sind Fehler, die du eigentlich längst selbst hättest finden 
müssen.
Gast #3105289
Lesenswert?

Manchmal ist es eben so dass man die Kleinigkeiten nicht mehr sieht nach 
langer Prorammtests habe noch andere Tests laufen, das war nur ein Teil.


ABER SUPER DANKE TROTZDEM dafür ist doch auch ein Forum da oder ?
(Firma: matzetronics) #3105316
Lesenswert?

Kenia schrieb:
> if(OCR1A= 255)  // wenn Maxwert noch nicht erreicht

Zumal das ja auch noch falsch ist, wenn man mal den Komentar ernster 
nimmt als die Programmzeile :-)

Ich denke mal, da soll eigentlich
1
 if (OCR1A < 255)  // wenn Maxwert noch nicht erreicht
stehen. Karl Heinz hat ja schon alles gesagt. Compilerwarnungen sind 
auch dazu da, sie zu lesen:
Warning: probably unwanted assignment...

Kenia schrieb:
> Karl Heinz Buchegger schrieb:
>>>    if (!(PINB & (PINB0)))
>>
>>     if (!(PINB & (1<<PINB0)))
>>
>>
>> Das steckt doch alles voller Primtivfehler.
>
>
> Hab ich korrigiert , keine Funktion !!!!

Das andere für PINB2 auch?
Gast #3105319
Lesenswert?

Alles korrigiert, geht aber immer noch nicht sorry

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



int main()
{
  // OCA1 => PB1 Ausgang
  DDRB |= (1<<OCR1A);    //Ausgang
  DDRB &= ~(1<<PORTB0);  //  Eingang Tater auf GND
  DDRB &= ~(1<<PORTB2);  //  Eingang Taster auf GND
  PORTB |= (1<<PORTB0) | (1<<PORTB2); // an S1 und S3 Taster PUL UP 
Widerstände

  // PWM Konfig
  TCCR1A |= (1<<WGM10); //fast PWM 8-Bit
  TCCR1B |= (1<<WGM12);
  TCCR1B |= (1<<CS12);  // Prescaler 256
  TCCR1A |= (1<<COM1A1);  //nichtinvertierender PWM Modus
  OCR1A = 0; //LED aus;
//  sei();

  while(1)
  {  // ******* Tatster 1 (LED heller) ************
    if (!(PINB & (1<<PINB0)))
    {
      if(OCR1A < 255)  // wenn Maxwert noch nicht erreicht
      OCR1A++;    // verbreitere die Impulsbreite
      _delay_ms(15);
    }

    //******* TASTER 2 (LED dunkler) *************
    if (!(PINB & (1<<PINB2)))
    {
      if(OCR1A > 0)  // wenn Minimalwert noch nicht erreicht
      OCR1A--;    // verbreitere die Impulsbreite
      _delay_ms(15);
    }
  }
}

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