ATmega8 negovanie bitu
Moderátor: Moderátoři
ATmega8 negovanie bitu
Ahojte,
velmi by mi pomohla pomoc s nasledovnym problemom - chcem negovat jeden bit vystupneho portu bez toho, aby som nejak ovplivnil dalsie bity... Ako nato? Nenasiel som na to ziadnu instrukciu ako je napr. v klasickych atmeloch napr.: cpl P1.7. Este teda podotknem, ze to programujem v assembleri pre AVR. Zrejme na to bude potrebny nejaky podprogramik ale vsetky moje napady sa mi javia zlozite a neverim, ze by sa to nedalo napisat pomocou 2-3 instrukcii...
Prosim poradte!
Vdaka
velmi by mi pomohla pomoc s nasledovnym problemom - chcem negovat jeden bit vystupneho portu bez toho, aby som nejak ovplivnil dalsie bity... Ako nato? Nenasiel som na to ziadnu instrukciu ako je napr. v klasickych atmeloch napr.: cpl P1.7. Este teda podotknem, ze to programujem v assembleri pre AVR. Zrejme na to bude potrebny nejaky podprogramik ale vsetky moje napady sa mi javia zlozite a neverim, ze by sa to nedalo napisat pomocou 2-3 instrukcii...
Prosim poradte!
Vdaka
negace
Zdravím. Tam toho asi moc nevymyslíš, instrukce přímo pro negaci pinu v AVR skutečně není. Bych si pro to třeba rezervoval jeden registr, který bych negoval instrukcí com a pak to vypouštěl na ten pin asi takhle.
Pokaždé když zavoláš tenhle podprogram tak se např. pin 5 překlopí.
NEGA: com R20 ;one´s complement
sbrc R20,5 ;Skip if Bit in Register Cleared
cbi PORTD,5 ;Clear Bit in I/O Register
sbrs R20,5 ;Skip if Bit in Register Set
sbi PORTD,5 ;Set Bit in I/O Register
ret
Pokaždé když zavoláš tenhle podprogram tak se např. pin 5 překlopí.
NEGA: com R20 ;one´s complement
sbrc R20,5 ;Skip if Bit in Register Cleared
cbi PORTD,5 ;Clear Bit in I/O Register
sbrs R20,5 ;Skip if Bit in Register Set
sbi PORTD,5 ;Set Bit in I/O Register
ret
Coat - zdasa, ze sa vyznas! robis casto s AVRkami? Ja som doteraz len s Atmelmi x51 ale chcem sa naucit riadne aj AVR. S tymto by si nevedel poradit? Som robil dnes pokusy so znizovanim spotreby na ATmega8, nastavil a pripojil som krystal 32,768kHz aj to s tym paradne chodi lenze mi to viackrat nejde preprogramovat . Pouzivam Ponyprog a vyzera to tak, ze funguje len ked je nastaveny interny oscilator. Odkedy som nastavil konfiguracnymi bitmi externy neda sa ani citat ani zapisovat... Asi budem musiet nastavit konfiguracne bity na interny oscilator na nejakom inom programatore vsak?
Jestli jde na ponyprogu nastavit pomalejsi frekvence prenosu dat po ISP, tak to zkus. Je potreba, aby na vodici SCK byla frekvence nizsi nez 1/4 hodin, tj. pro tebe neco pod 8 kHz.
Jinak:
a) sehnat jiny programator, ktery toto umi (ja mam AVR Dragon, kde se da nastavit ISP frekvence od 51 Hz do 8 MHz)
b) vnutit procesoru vyssi frekvenci hodin zvnejsku (misto Xtalu pripojit vystup treba 4 MHz z generatoru nebo treba z RC oscilatoru z nejakych hradel apod.)
c) pouzit paralelni programovani (nebo JTAG, kdybys mel procesor, ktery ho umi) - tyto metody nemaji problemy u procesoru bez hodin. kmitoctu nebo s jeho nizkou frekvenci
Problemy s nizkou hodinovou frekvenci jsou i pri pouzivani DebugWire, ale az pri frekvencich hodin pod cca. 100 kHz a je to loterie, nekdy bezi a jindy ne.
Jinak:
a) sehnat jiny programator, ktery toto umi (ja mam AVR Dragon, kde se da nastavit ISP frekvence od 51 Hz do 8 MHz)
b) vnutit procesoru vyssi frekvenci hodin zvnejsku (misto Xtalu pripojit vystup treba 4 MHz z generatoru nebo treba z RC oscilatoru z nejakych hradel apod.)
c) pouzit paralelni programovani (nebo JTAG, kdybys mel procesor, ktery ho umi) - tyto metody nemaji problemy u procesoru bez hodin. kmitoctu nebo s jeho nizkou frekvenci
Problemy s nizkou hodinovou frekvenci jsou i pri pouzivani DebugWire, ale az pri frekvencich hodin pod cca. 100 kHz a je to loterie, nekdy bezi a jindy ne.