Dobry den,
Vie mi niekto prosim vas poradit ako pomocou ATMEGA32 generovat jeden presny impulz o dlzke 70ms ?
Potrebujem ho na programovanie starych eprom.
Dakujem
Dobry den,
Vie mi niekto prosim vas poradit ako pomocou ATMEGA32 generovat jeden presny impulz o dlzke 70ms ?
Potrebujem ho na programovanie starych eprom.
Dakujem
ono by nebylo od veci popsat ten signal krapet presneji. ten pulz je jeden anebo jich je vic za sebou? po jak dlouhe dobe se opakuji apod…
jinak mas vcelku dve moznosti. v obou je dulezite vedet na jake frekvenci pojede dotycna mega32.
pote bud
a) pouzit presne spocitany cyklus (da se odladit primo v avrstudiu)
b) pouzit presne spocitane preruseni
Je to jednoduche.Na pamati eprom bude nastavena adresa+data (cez porty atmega) a potom tam bude poslany programovaci impulz.Cez tranzistor asi 26V.
Adresa sa inkrementuje o jeden a nastavia sa dalsie pozadovane data…
A opakuje sa to iste.
Adresovanie je jednoduche. Data pojdu bude z eeprom alebo datovej tabulky. Potrebujem len ten impulz.
a protoze jsi ani ted nenapsal pri jake frekvenci pojede dotycna mega, tak vynecham bod b, ktery je mnohem elegantnejsi.
jo a je to spocitane pro 16MHz
sbi PORTD,7 ; nastaveni log.1
ldi R16,$05
ldi R17,$43
ldi R18,$89
opakuj: dec R18
cpi R18,$00
brne opakuj
dec R17
cpi R17,$00
brne opakuj
dec R16
cpi R16,$00
brne opakuj
cbi PORTD,7 ; nastaveni log.0
Dakujem za riesenie.Frekvenciu ste trafil. JE to 16MHz.
Ak by ste si nasiel rad by som si pozrel aj to elegantnejsie riesenie
J
LEn zo zaujimavosti typ pameti ? ktora sa bude programovat leb osudim ze to az take presne nebude musiet byt.
Přesně, a navíc se to bude lišit i podle výrobce paměti.
Je to stara 2708.
Zhruba od 50 do 70 ms.
Zalezi od vyrobcu.
Ide mi skor o to ako to naprogramovat.
Adresu a data tam viem poslat ale programovaci impulz na to moja znalost AVR nestaci.
J
tady jen tak od oka (nezkousel jsem to)
tohle musi byt na te konkretni adrese (lepe receno staci tam dat rjmp nekam, kam umistis zbyly obsah)
.ORG 0x12
cli
cbi PORTD,7
reti
nastaveni casovace, je nutne zavolat predtim, nez zacnes pouzivat dotycnou funkci. pocet tiku pro 70ms pri f=16MHz je 446h
nastaveni: clr R16
out TCCR1A,R16
ldi R16,(1<<WGM12)|(1<<CS12)|(1<<CS10)
out TCCR1B,R16
in R16,TIMSK
ori R16,(1<<OCIE1A)
out TIMSK,R16
ldi R16,$04
out OCR1AH,R16
ldi R16,$46
out OCR1AL,R16
ret
a timhle uz jenom zavolas samotny pulz a muzes si dal hrat v programu. o ukonceni pulzu se postara preruseni
pulz: sbi PORTD,7
clr R16
out TCNT1H,R16
out TCNT1L,R16
sei
ret
samozrejme by to slo udelat tak, ze to preruseni bude zapinat a vypinat primo ten pin, ale priznam se ze uz jsem liny
jo a pokud bys rad ten pocet tiku pro jinou frekvenci, tak v tomto pripade 1024/16M (nastavena delicka v TCCR1B). vyjde 0.000064s coz je cas jednoho tiku. no a tim vydelis tech 70ms a voila … 446 tiku timeru da lehounce pres.
Super.Moc dakujem.Urcite mi to pomoze.Lebo som na tom zamrzol.
Dik
a nikdo me neupozornil mam tam chybku.
spravne umisteni do interrupt table je .ORG 0x0E (timer1 compare match) (misto spatneho .ORG 0x12, coz by ale melo take chodit - ale at nedelam zmatky)
Proto je lepší používat názvy místo čísel.
.org OC1Aaddr