Nefunguje korektně PWM na attiny2313
Moderátor: Moderátoři
-
sqrka
Nefunguje korektně PWM na attiny2313
..
// Vystupni piny
bitSet (DDRB, 2);
bitSet (DDRB, 3);
bitSet (DDRB, 4);
bitSet (DDRD, 4);
bitSet (DDRD, 5);
bitSet (DDRD, 6);
OCR1A = 0;
OCR1B = 0;
// nastavi oc1a a oc1b fast 9bit pwm (az do cisla 511) viz. datasheet
TCCR1A = 0xA2;
TCCR1B = 0x09;
sei();
m_delay_s(1);
OCR1A = 350;
m_delay_s(1);
OCR1B = 350;
m_delay_s(1);
OCR1A = 0;
OCR1B = 0;
..
Podle datasheetu by to mělo fungovat. Před půl rokem jsem řešil asi stejný problém, nakonec ho tuším vyřešilo nastavení nějakých low nebo high fuse bitů. Problém je že už si vůbec nepamatuju jak přesně jsem to řešil. Zkusil jsem vypnout SPI, ale to jsem asi neměl dělat, protože už se na chip nedostanu. Možná jsem tím vypnul programování, ale chipů mám víc, takže to zatím nevadí. Co dělám špatně s tím pwm?
-
sqrka
-
sqrka
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/pgmspace.h>
#include <stdlib.h>
#include <string.h>
#define bitSet(var, mask) ((var) |= (1 << (mask)))
#define bitClear(var, mask) ((var) &= ~(1 << (mask)))
#define F_CPU 20000000UL // 20 MHz
#include <util/delay.h>
void m_delay_ms(unsigned int ms) {
unsigned int i;
for ( i=0; i<ms; i++) { _delay_ms(1); }
}
void m_delay_s(unsigned int s) {
unsigned int i, i2;
for ( i=0; i<s; i++) { for ( i2=0; i2<100; i2++) { _delay_ms(10); } }
}
int main () {
// Vstupni piny
bitClear (DDRB, 0);
bitClear (DDRB, 1);
bitClear (DDRD, 2);
bitClear (DDRD, 3);
// Vystupni piny
bitSet (DDRB, 2);
bitSet (DDRB, 3);
bitSet (DDRB, 4);
bitSet (DDRD, 4);
bitSet (DDRD, 5);
bitSet (DDRD, 6);
OCR1A = 0;
OCR1B = 0;
// nastavi oc1a a oc1b fast 9bit pwm (az do cisla 511) viz. datasheet
TCCR1A = 0xA2;
TCCR1B = 0x09;
sei();
m_delay_s(1);
OCR1A = 350;
m_delay_s(1);
OCR1B = 350;
m_delay_s(1);
OCR1A = 0;
OCR1B = 0;
m_delay_s(1);
bitSet (PORTB, 2);
bitSet (PORTD, 5);
m_delay_s(1);
bitClear (PORTB, 2);
bitClear (PORTD, 5);
while(1) {
m_delay_s(5);
}
}
-
sqrka
-
sqrka
-
sqrka
-
sqrka
-
sqrka
sqrka píše:To bych rád věděl. Elektricky to v cajku asi mám, teď jsem si uvědomil, že když jsem nastavoval hfuse, tak jsem zbytek ostatních hodnot přepsal nulama místo defaultů tak proto mi to teď nejde programovat, myslím žo to vypnutí SPI mělo pomoct.
Nevím co do toho motáš SPI (ISP), které se sériově vypnout stejně nedá. Na ATmega32 jsi nejspíš zakazoval JTAG, protože ten je standardně zapnutý a zabírá 4 piny na portu C. Tina ale JTAG nemá. A nevím kde bereš tu jistotu, že máš napájení v pořádku, koukal jsi na něj osciloskopem?