ATmega8 negovanie bitu

Diskuze a poradna o programátorech a programování různých obvodů

Moderátor: Moderátoři

Odpovědět
Zpráva
Autor
Uživatelský avatar
MiLe
Příspěvky: 123
Registrován: 18 říj 2005, 02:00

ATmega8 negovanie bitu

#1 Příspěvek od MiLe »

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

coat
Příspěvky: 68
Registrován: 13 čer 2007, 02:00
Bydliště: BRNO

negace

#2 Příspěvek od coat »

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

Uživatelský avatar
MiLe
Příspěvky: 123
Registrován: 18 říj 2005, 02:00

#3 Příspěvek od MiLe »

Coat: DAKUJEM
je to presne to co som hladal - elegantne a jednoduche!

Uživatelský avatar
MiLe
Příspěvky: 123
Registrován: 18 říj 2005, 02:00

#4 Příspěvek od MiLe »

... az nato, ze bez toho com R20, lebo potom je to negovane 2x a vysledok je tym padom rovnaky...
miesto com R20, treba napisat in R20, PORTD. Aspon podla mna.

Uživatelský avatar
jankop
Příspěvky: 679
Registrován: 04 dub 2007, 02:00
Kontaktovat uživatele:

#5 Příspěvek od jankop »

AVR nedovede XOR mezi bitovou maskou - literálem a výstupním registrem? To bych považoval za standardní řešení při potřebě negovat jeden z řady výstupních bitů.

coat
Příspěvky: 68
Registrován: 13 čer 2007, 02:00
Bydliště: BRNO

#6 Příspěvek od coat »

pro Mile: s tím "com" to funguje, i když jak to píšeš ty je to asi lepší v tom, že ten registr pak můžeš používat i někde jinde.

pro jankop: s tím xor je to asi uplně nejlepší:


NEGA: in R16,PORTD
ldi R17,0b00100000 ;neguj 5. bit
eor R16,R17 ;EX-OR
out PORTD,R16
ret

Uživatelský avatar
MiLe
Příspěvky: 123
Registrován: 18 říj 2005, 02:00

#7 Příspěvek od MiLe »

Pani, diky za navrhy... tusim tu budem dotazy pisat castejsie :)

coat
Příspěvky: 68
Registrován: 13 čer 2007, 02:00
Bydliště: BRNO

#8 Příspěvek od coat »

Jenom ještě doplním. Např. u attiny2313 jde tohle překlápění dělat jednoduše zapsáním 1 do registru PIN: sbi PIND,3
Poté se bit 3 v PORTD neguje.
V datasheetu je to pod názvem "Toggling the Pin".
U atmega8 tohle zrovna nefunguje.

Uživatelský avatar
MiLe
Příspěvky: 123
Registrován: 18 říj 2005, 02:00

#9 Příspěvek od MiLe »

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?

Uživatelský avatar
istrasil
Příspěvky: 71
Registrován: 30 črc 2005, 02:00
Bydliště: Brno
Kontaktovat uživatele:

#10 Příspěvek od istrasil »

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.

Odpovědět

Zpět na „Programování PIC, ATMEL, EEPROM a dalších obvodů“