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

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.