Problémy při programování ATmega328p, TCNT1 v CTC módu

Re:Problémy při programování ATmega328p, TCNT1 v CTC módu
« Odpověď #15 kdy: 29. 12. 2017, 21:05:47 »
To reštartovanie nebolo náhodou spôsobené tým že si nemal nekonečnú slučku na konci main? Lebo každý kompiler to robí inak. Niektorý keď vyletíš z mainu to zacyklí sám. Iný to reštartne lebo to považuje za chybu tvojho programu.


xdtgj

Re:Problémy při programování ATmega328p, TCNT1 v CTC módu
« Odpověď #16 kdy: 29. 12. 2017, 21:10:30 »
To reštartovanie nebolo náhodou spôsobené tým že si nemal nekonečnú slučku na konci main? Lebo každý kompiler to robí inak. Niektorý keď vyletíš z mainu to zacyklí sám. Iný to reštartne lebo to považuje za chybu tvojho programu.

To si nemyslím. Sice jsem si teď pustil na Arduinu jenom tu samotnou smyčku, ale obecně když jsem programoval v Asembleru, restarty Arduina vždy znamenaly neinicializovaný SP (na nulové adrese je zkrátka vektor přerušení pro restart).

xdtgj

Re:Problémy při programování ATmega328p, TCNT1 v CTC módu
« Odpověď #17 kdy: 29. 12. 2017, 21:13:25 »
To reštartovanie nebolo náhodou spôsobené tým že si nemal nekonečnú slučku na konci main? Lebo každý kompiler to robí inak. Niektorý keď vyletíš z mainu to zacyklí sám. Iný to reštartne lebo to považuje za chybu tvojho programu.

To si nemyslím. Sice jsem si teď pustil na Arduinu jenom tu samotnou smyčku, ale obecně když jsem programoval v Asembleru, restarty Arduina vždy znamenaly neinicializovaný SP (na nulové adrese je zkrátka vektor přerušení pro restart).

Abych to doplnil - samotná smyčka se nerestartuje.

Re:Problémy při programování ATmega328p, TCNT1 v CTC módu
« Odpověď #18 kdy: 29. 12. 2017, 21:24:09 »
Hodil som do simulátora tvoj posledný výtvor. Kód v ISR sa vykonáva. LED nebliká lebo ako výstup si si zapol PC2, ale v prerušení neguješ PC1.

xdtgj

Re:Problémy při programování ATmega328p, TCNT1 v CTC módu
« Odpověď #19 kdy: 29. 12. 2017, 21:50:16 »
Hodil som do simulátora tvoj posledný výtvor. Kód v ISR sa vykonáva. LED nebliká lebo ako výstup si si zapol PC2, ale v prerušení neguješ PC1.

No... Tak teď se cítím trochu trapně, ta chyba tam byla evidentní.

Program jsem podle té chyby opravil, ale stejně mi to nebliká. Asi si na tohle opravdu budu muset pořídit Windows...
Kód: [Vybrat]
#define __AVR_ATmega328P__
//#define __AVR_ATmega128__
#include <avr/io.h>
#include <avr/interrupt.h>
//#include "Initialization.c"



int main(void){
    cli();
    // SP = RAMEND;
    DDRC = 0xFF;
    PORTC = 0;
    DDRB = 0xFF;
    PORTB = 0;


     // initialize Timer1
       // disable global interrupts
  TCCR1A = 0;   // set entire TCCR1A register to 0
  TCCR1B = 0;   // same for TCCR1B

  // set compare match register to desired timer count:
  OCR1A = 15624;
  // turn on CTC mode:
  TCCR1B |= (1 << WGM12);
  // Set CS10 and CS12 bits for 1024 prescaler:
  TCCR1B |= (1 << CS10);
  TCCR1B |= (1 << CS12);
  // enable timer compare interrupt:
  TIMSK1 |= (1 << OCIE1A);
  sei();      // enable global interrupts

    while(1);
}


ISR(TIMER1_COMPA_vect){
  PORTC ^= 0x4;
}

}


xdtgj

Re:Problémy při programování ATmega328p, TCNT1 v CTC módu
« Odpověď #20 kdy: 29. 12. 2017, 21:56:47 »
Nahrál jsem to přes Arduino IDE a vše funguje bez problémů. Docela by mě zajímalo, v čem to je...
Každopádně díky za pomoc s tou chybou přes ten simulátor.