Stránka 2 z 6

Napsal: 16 črc 2009, 18:44
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?

Napsal: 16 črc 2009, 19:29
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á".

Napsal: 16 črc 2009, 19:53
od siska
Brown-out detektor zapnutý předpokládám nemám, protože na fuse bity jsem nešahal.

Napsal: 16 črc 2009, 23:33
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?

Napsal: 17 črc 2009, 00:00
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.

Napsal: 17 črc 2009, 00:13
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?

Napsal: 17 črc 2009, 00:26
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.

Napsal: 17 črc 2009, 01:13
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.

Napsal: 17 črc 2009, 01:32
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;

Napsal: 17 črc 2009, 09:06
od BOBOBO
Začít jsi měl napájením relat a motorů jiným zdrojem .

Napsal: 17 črc 2009, 09:56
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é.

Napsal: 17 črc 2009, 11:03
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?

Napsal: 17 črc 2009, 12:00
od Andrea
Třeba máš botu v programu.

Napsal: 17 črc 2009, 12:39
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.

Napsal: 17 črc 2009, 12:50
od Andrea
Ty jseš sqrka?