Odrušení obvodu
Moderátor: Moderátoři
-
siska
-
siska
-
siska
-
siska
-
siska
-
siska
siska píše:Multimetrem a jeste jsem mel pripojenou led diodu a sledoval jestli sviti stale stejne. Nejake spicky takhle nezachytim jasne, ale napeti bylo stale konstantní po nekolik resetu. Z MCUCSR jsem se dovedel jen to, ze je aktivni • Bit 0 – PORF: Power-on Reset Flag, ale ten se jestli jsem to dobre pochopil nastavuje pri startu MCU.
Ten MCUCSR musíš po přečtení na začátku programu hned smazat, máš to napsaný v datašítu. A ten brown-out má cenu zapnout, jestli máš bordel na napájení, tak zresetuje procesor a z MCUCSR poznáš, že to byl brown-out reset.
Že to při PWM na max. neruší, je celkem logické, protože je tím PWM vypnutá (trvale v log.1), nic se nespíná a rušení je tudíž malé.
-
siska
-
siska
#include <avr/io.h>
#define bitSet(var, mask) ((var) |= (1 << (mask)))
#define bitClear(var, mask) ((var) &= ~(1 << (mask)))
#define F_CPU 14745600UL // 14.7456 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 - hall sensory
bitClear (DDRD, 5);
bitClear (DDRD, 6);
bitClear (DDRD, 7);
bitClear (DDRB, 0);
// Vystupni piny
// led
bitSet (DDRC, 0);
bitSet (DDRC, 1);
bitSet (DDRC, 2);
bitSet (DDRC, 3);
bitSet (DDRC, 4);
bitSet (DDRC, 5);
// relatka a ocr
bitSet (DDRD, 2);
bitSet (DDRD, 3);
bitSet (DDRB, 1);
bitSet (DDRB, 2);
OCR1A = 0;
OCR1B = 0;
// nastavi oc1a a oc1b fast 9bit pwm (az do cisla 511) viz. datasheet
TCCR1A = 0xA2;
TCCR1B = 0x09;
bitSet (PORTC, 0);
m_delay_s(1);
bitClear (PORTC, 0);
m_delay_s(1);
OCR1A=300;
OCR1B=300;
if (bit_is_set(MCUCSR,WDRF)) bitSet (PORTC, 1); else bitClear(PORTC, 1);
if (bit_is_set(MCUCSR,BORF)) bitSet (PORTC, 2); else bitClear(PORTC, 2);
MCUCSR=0;
while(1) {
m_delay_s(1);
if(! bit_is_set(PINC,0)) { bitSet (PORTC, 0); } else { bitClear (PORTC, 0); }
}
return 0;
}
Tam by chyba být neměla.