Odrušení obvodu

Problémy s návrhem, konstrukcí, zapojením, realizací elektronických zařízení

Moderátor: Moderátoři

Zpráva
Autor
Andrea
Příspěvky: 9340
Registrován: 07 zář 2007, 00:00

#16 Příspěvek od Andrea »

Jak zjistit důvod resetu je popsáno v datašítu. Koukám, že tam vůbec nemáš u těch motorků ochranné diody jako máš u těch relátek (kde ani nejsou potřeba, protože jsou integrované u těch darlingtonů). Dej je tam, mezi drainy FETů a + napájení. A lítání napájení procesoru 4,8 - 5,3V nebude úplně v pořádku. Máš zapnutý brown-out detektor?
siska

#17 Příspěvek od siska »

Zjistil jsem, že jednotlivě jeden nebo druhý motor je v pohodě. Ale jak běží oba je zle. Zvýšil jsem výkon a teď je nemusím ani zastavovat a už se to "zasekává".
siska

#18 Příspěvek od siska »

Brown-out detektor zapnutý předpokládám nemám, protože na fuse bity jsem nešahal.
siska

#19 Příspěvek od siska »

Diody nepomohly, brown-out nemá cenu nastavovat, protože vím co se děje. Restartuje se MCU nebo zůstane v nekonzistentním stavu(do main jsem umístil bliknutí diody tak vím kde to zrovna v programu je). Nekonzistentní stav: motorky běží jak chtějí a diody svítí jak chtějí. Pokud dojde k restartu tak program normálně běží od začátku. Kde by mohla být ještě chyba?
siska

#20 Příspěvek od siska »

A to napětí procesoru nelítá. To jsem si myslel. bylo to měřený ještě před těma spostama odrušovacích kondenzátorů. Napětí procesoru je konstantí 4.96V.
Uživatelský avatar
stepa
Příspěvky: 4669
Registrován: 05 led 2007, 00:00
Bydliště: poblíž HK
Kontaktovat uživatele:

#21 Příspěvek od stepa »

siska píše:A to napětí procesoru nelítá. To jsem si myslel. bylo to měřený ještě před těma spostama odrušovacích kondenzátorů. Napětí procesoru je konstantí 4.96V.

Tos meril digitalnim multimetrem, nebo ses na to dival osciloskopem?
...to co pisu nemyslim zle, ikdyz to tak muze vyznit...
siska

#22 Příspěvek od siska »

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.
siska

#23 Příspěvek od siska »

Tak jsem vzal patici, na ktere jsem zohybal nepotrebne konektory a vrazil do patice na desce a do ni atmegu, celkem 6 pinu zapojeno: Vcc, gnd, Xtal1, Xtal2, OCR1A, OCR1B a chovalo se to stejne, takze problem musi byt spojen s OCRx.
siska

#24 Příspěvek od siska »

Tak problém je opravdu s pwm, ale jsem z toho jelen.
OCR1A=250;
OCR1B=250;
funguje bez problémů

OCR1A=300;
OCR1B=300;
a vyšší už blbnou

a plný výkon
OCR1A=511;
OCR1B=511;
zase v pohodě, ale 500 už zase blbne.

Zajímavé zjištění, ale kde je teda chyba?
Nastavení OCR:
TCCR1A = 0xA2;
TCCR1B = 0x09;
Uživatelský avatar
BOBOBO
Příspěvky: 20888
Registrován: 25 úno 2008, 00:00
Bydliště: Rychnovsko

#25 Příspěvek od BOBOBO »

Začít jsi měl napájením relat a motorů jiným zdrojem .
Andrea
Příspěvky: 9340
Registrován: 07 zář 2007, 00:00

#26 Příspěvek od Andrea »

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

#27 Příspěvek od siska »

Tak jsem brown-out zapnul a po přečtení MCUCSR ho vymažu. Brown-out nebyl detekován, žádný důvod resetu tam nebyl, tak co s tím?
Andrea
Příspěvky: 9340
Registrován: 07 zář 2007, 00:00

#28 Příspěvek od Andrea »

Třeba máš botu v programu.
siska

#29 Příspěvek od siska »

Trochu jsem ten program pro tento účel ořezal:

#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.
Andrea
Příspěvky: 9340
Registrován: 07 zář 2007, 00:00

#30 Příspěvek od Andrea »

Ty jseš sqrka?
Odpovědět

Zpět na „Řešení problémů s různými konstrukcemi“