ATtiny10 Timer0

Gast #2610272
Lesenswert?

Hallo, hat jemand Erfahrungen mit dem ATtiny10 und der Timer-Funktion ?

Hier mein Code:

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

// Declare your global variables here

ISR (TIMER0_OVF_vect){
  TCNT0=60000;
  if ((PORTB && 0x2) == 0x2){
    PORTB &= ~(1<<PB1);
  }
  else{
    PORTB |= (1<<PB1);
  }
}

int main(void)
{
DDRB=0xf;
TIMSK0 |= (1<<TOIE0);
TCCR0B |= (1<<CS00);
TCCR0B &= ~(1<<CS01);
TCCR0B |= (1<<CS02);
TCNT0=60000;
sei();

while (1)
      {
    PORTB |= (1<<PB0);


    PORTB &= ~(1<<PB0);
      }
}

Ich möchte den Timer OVERFLOW abfangen, wo ist der Fehler ?

Vielen Danke für Eure Hilfe !

Gruß Luke
#2610286
Lesenswert?

>   if ((PORTB && 0x2) == 0x2){

bitweises UND, nicht logisches:

  if ((PORTB & 0x2) == 0x2){


und den Vergleich mit 0x02 sparst du dir besser. Ist weniger 
fehleranfällig in der Programmierung. "Nicht 0" ist mehr als 
ausreichend. Und genau das wird gemacht, wenn du nur den arithmetischen 
Ausdruck hinschreibst.

  if (PORTB & 0x2){

Und wenn du dann nocht die 0x2 in der Form 1<<PB1 ausdrückst, ist auch 
noch dem letzten klar, dass es zwischen der Abfrage und der zugehörigen 
Aktion einen Zusammenhang gibt

  if (PORTB & (1<<PB1)){
    PORTB &= ~(1<<PB1);
  }
  else{
    PORTB |= (1<<PB1);
  }
#2610339
Lesenswert?

Peer schrieb:
> Lucky Luke schrieb:
>> if ((PORTB && 0x2) == 0x2){
>
> Ist es Absicht, daß du PORTB abfragst? Status ermittelt man über PINB.

Er will offenbar den Pin blinken lassen.
Von daher ist an dieser Stelle PORTB schon ok.
Er muss nur die Abfrage richtig machen.
(Und natürlich all das Zeug aus dem anderen Thread berücksichtigen. 
Welcher Teufel hat den TO eigentlich zu einem Tiny10 geraten? Noch 
blöder gehts nun wirklich nimmer)
Gast #2610393
Lesenswert?

Karl Heinz Buchegger schrieb:
> Er muss nur die Abfrage richtig machen.

Und er muss den Vektor richtig nennen. Wobei ihm das der Compiler 
bereits per Warnung mitgeteilt hat.

Lucky Luke schrieb:
> Es ist wohl besser das dieser Thread geschlossen oder besser gelöscht
> wird. Wenn ich schon alles über µC wüsste, hätte ich auch keine Fragen.

Das ist es nicht, Du bist nur verständnisresistent. Es haben Dir 
mindestens zwei Leute, die sich mit dem Teil auskennen, gesagt: lass es, 
nimm Assembler dafür. Das Teil ist schwierig, hat nur 'nen Teil der 
üblichen Prozessorregister und dann auch noch das Problem mit dem AVR 
GCC, der falschen Opcode einbaut.

Aber das ist Dir alles wurscht, Du ignorierst es einfach, aber dann wird 
das aber auch nix und Du musst auch nicht beleidigte Leberwurst spielen.
Gast #2611236
Lesenswert?

Und es lebt doch ....

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


// Declare your global variables here

ISR (TIM0_OVF_vect){
  TCNT0=64588;
  if ((PORTB & 0x2) == 0x2){
     PORTB &= ~(1<<PB1);
    }
  else{
    PORTB |= (1<<PB1);
      }
}

int main(void)
{
DDRB=0xf;
TIMSK0 |= (1<<TOIE0);
TCCR0B |= (1<<CS00);
TCCR0B &= ~(1<<CS01);
TCCR0B |= (1<<CS02);
TCNT0=64588;

sei();

while (1)
      {
    PORTB |= (1<<PB0);
    /*if(TIFR0 & (1<<TOV0)){
      if ((PORTB & 0x2) == 0x2){
         PORTB &= ~(1<<PB1);
        }
      else{
         PORTB |= (1<<PB1);
        }
    }*/
      PORTB &= ~(1<<PB0);
      }
}

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