Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
marsovc Mojster
Pridružen/-a: Ned Feb 2004 16:43 Prispevkov: 22 Kraj: Ljubljana
|
Objavljeno: Sre Jul 20, 2005 1:01 pm Naslov sporočila: Codevision |
|
|
Zanima me ali se je že kdo spoprijel s programom Codevision avr c compiler? Ker jst mam eno tečavico? _________________ Vem, da nič ne vem:) |
|
Nazaj na vrh |
|
|
Jan Začetnik
Pridružen/-a: Sob Jul 2005 22:40 Prispevkov: 13
|
Objavljeno: Pon Avg 01, 2005 2:37 pm Naslov sporočila: |
|
|
Sem se...
Do not ask to ask just ask :D
Povej kaj te muči. |
|
Nazaj na vrh |
|
|
marsovc Mojster
Pridružen/-a: Ned Feb 2004 16:43 Prispevkov: 22 Kraj: Ljubljana
|
Objavljeno: Sre Avg 17, 2005 5:38 pm Naslov sporočila: Debounce |
|
|
Kako bi prebral tipko in kako bi dobil debounce učinek?
LP _________________ Vem, da nič ne vem:) |
|
Nazaj na vrh |
|
|
slawc Profesionalec
Pridružen/-a: Tor Jan 2004 11:41 Prispevkov: 102
|
Objavljeno: Sre Avg 17, 2005 9:48 pm Naslov sporočila: |
|
|
to pa ni tezava, ki bi bila odvisna od prevajalnika. Pomemben je pravilni algoritem. Tipka niha dolcen cas, kasneje se umiri. Stanje tipke moras veckrat prebrati, ko se dolocen cas stanje ne spreminja, se je zadeva umirila. _________________ LP,
Slawc |
|
Nazaj na vrh |
|
|
Jan Začetnik
Pridružen/-a: Sob Jul 2005 22:40 Prispevkov: 13
|
Objavljeno: Čet Avg 18, 2005 3:04 pm Naslov sporočila: |
|
|
Lahko sprogramiraš debounce, če pa ti ni škoda enega pina prekinitve potem lahko narediš naslednje:
Koda: |
________
|
INT1 |--------------------
| |
| -----
| \ /
| \ /
| ˘˘|˘˘
| |1N4148
PD.0 |--------------------o
| |
| |
| |
| |
| _- |
GND |-----------O˘ o----
|
|
˘˘˘˘˘˘˘˘
|
Upam, da je shema dovolj razumljiva.
Koda v Cju je pa tu:
Koda: |
unsigned char ScanKey()
{
if (!(PIND & 0x01)) return 0x01;
return NONE;
}
// interupt ki prebere tipke
interrupt [3] void int1_isr(void)
{
delay_ms(10);
Key = ScanKey();
}
|
Prekinitev je treba nastavit tako da se proži ob padcu napetosti |
|
Nazaj na vrh |
|
|
marsovc Mojster
Pridružen/-a: Ned Feb 2004 16:43 Prispevkov: 22 Kraj: Ljubljana
|
Objavljeno: Pon Sep 19, 2005 10:52 am Naslov sporočila: timer0 |
|
|
Zivjo
Napisal sem program za časovno prekinitev s timer0 pa se mi zadeva nikakor ne odziva.
Nastavil sem registre, preddelilnik in opazoval TOV0 (vsaj mislim) pa sem želel da se neka spremenljivka povečuje. Kristal je 12 Mhz glede na nastavitve registrov sem izračunal da nja bi bila za kasnitev 0,1 sekunde.
Za pomoč se že v naprej zahvaljujem
// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
// Reinitialize Timer 0 value
counter = 0;
while (counter < 75) {
TCNT0 = 5;
TCCR0 = 0x03;
while ((TIFR & 0x01) == 0);
TCCR0 = 0;
TIFR = TIFR|0x01;
counter++;
a++;
};
}
// Global enable interrupts
#asm("sei")
while (1)
{
PORTB = a;
};
} _________________ Vem, da nič ne vem:) |
|
Nazaj na vrh |
|
|
Jan Začetnik
Pridružen/-a: Sob Jul 2005 22:40 Prispevkov: 13
|
Objavljeno: Pon Sep 19, 2005 2:51 pm Naslov sporočila: |
|
|
Emm sumljivo si ti to napisal...
Po moje moreš met kje kak void main(void)
potem pa narediš tako
Koda: | void main(void)
{
//inicializiraš porte pa to
//potem pa moreš še timer0 inicializirat
// timer0
TCCR0=0x02;
TCNT0=0xff; // tu nastavi tvoje vrednosti
// potem pa moraš še vklopit da se prekinitev sproži ko timer preide iz 0xff na 0x00
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x05;
while(1)
{
}
} |
Upam da ti bo kaj pomagalo pa oprosti za pozen odgovor.. nisem gledal foruma...
LP Jan |
|
Nazaj na vrh |
|
|
marsovc Mojster
Pridružen/-a: Ned Feb 2004 16:43 Prispevkov: 22 Kraj: Ljubljana
|
Objavljeno: Tor Sep 20, 2005 9:08 pm Naslov sporočila: problemčki |
|
|
Citiram: | /*****************************************************
Chip type : AT90S2313
Clock frequency : 12,000000 MHz
Memory model : Tiny
External SRAM size : 0
Data Stack size : 32
*****************************************************/
#include <90s2313.h>
#include <delay.h>
int counter = 0;
unsigned char a = 254;
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
TCNT0 = 6;
if ((TIFR = TIFR & 0x01) == 1)
{
TIFR = 0;
a++;
}
}
void main(void)
{
PORTB=0xF7;
DDRB=0xFF;
PORTD=0x7F;
DDRD=0x7F;
TIMSK=0x02; //requirement (1)
TCCR0=0x03; // set prescale
TCNT0=0x06; // set counts
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
OCR1H=0x00;
OCR1L=0x00;
GIMSK=0x00;
MCUCR=0x00;
ACSR=0x80;
#asm("sei") // enable interrupts //requirement (3)
do
{
PORTB = a;
}while(1);
}
|
Ima morda kdo še kaj domišlije zakaj ta koda ne dela?
Hvala _________________ Vem, da nič ne vem:) |
|
Nazaj na vrh |
|
|
marsovc Mojster
Pridružen/-a: Ned Feb 2004 16:43 Prispevkov: 22 Kraj: Ljubljana
|
Objavljeno: Sre Sep 21, 2005 6:26 am Naslov sporočila: |
|
|
Zivjo
Sem prišel do rešitve in vam pišem da ne bo še kdo izgubil kakšno dopoldne brezveze. V zgorrnji kodi je vse prov le da je potrebno v prekinitvi pobrisati vse razen a++; . Ker program Codevision verjerno sam pobriše TOV0 bit in ga ni potrebno gledati ne brisati!!!
Hvala vam za pomoč, LP _________________ Vem, da nič ne vem:) |
|
Nazaj na vrh |
|
|
denci Začetnik
Pridružen/-a: Ned Nov 2005 16:38 Prispevkov: 18
|
Objavljeno: Pon Maj 09, 2011 3:20 pm Naslov sporočila: |
|
|
Tudi jaz imam eno vprašanje in sicer poskušam analizirati IR SIRC sprejemnik s pomočjo atmega88 in programskim orodjem codevision, pame zanima, kako sprožiti notranji timer s pomočjo neke spremembe stanja na vhodu.
Rabil bi zato, da bi sprejeti signal najprej zaznal in sprožil timer, nato bi timer vsakih 600us preverjal kaj se je zgodilo s sprejetim signalom in prebral kakšna tipka je bila pritisnjena (12 bitni sirc protokol).
Po moje bi bila na tak načina zadeva najpreprostejša, kaj mislite?? _________________ Če kaj ne veš, ne sramuj se vprašati! |
|
Nazaj na vrh |
|
|
Gustav Profesionalec
Pridružen/-a: Pon Jun 2005 17:19 Prispevkov: 768
|
Objavljeno: Tor Maj 10, 2011 5:20 pm Naslov sporočila: |
|
|
denci je napisal/a: | Po moje bi bila na tak načina zadeva najpreprostejša, kaj mislite?? |
Z nekaj malega srece bos tako dobil ob isti pritisnjeni tipki vsakic malo drugacen rezultat. Protokol je lepo opisan, meri na sredini intervala, kjer naj bi bil nivo v enem ali drugem stanju, ne pa ravno na meji. Obenem ob stanju 1 se dodatno preveri, da ni sprejemnik defekten. |
|
Nazaj na vrh |
|
|
denci Začetnik
Pridružen/-a: Ned Nov 2005 16:38 Prispevkov: 18
|
Objavljeno: Sob Jul 09, 2011 11:13 am Naslov sporočila: |
|
|
Zanima me nekaj, uporarabljam Atmega8 in program codevisionavr, pa me zanima, kako sedaj pri sprejemu ir signala izmeriti čas med rising edge in falling edge, da se na podlagi tega prepozna znak.
In kako je potem s frekvneco oddajnika, ali sprejem vzame samo en rissing edge in falling edge za en pulz ali vse vmesne in kako potem vedeti, do koliko je števec preštel med prvim in zadnjim pulzom?? _________________ Če kaj ne veš, ne sramuj se vprašati! |
|
Nazaj na vrh |
|
|
denci Začetnik
Pridružen/-a: Ned Nov 2005 16:38 Prispevkov: 18
|
Objavljeno: Tor Jul 12, 2011 12:31 pm Naslov sporočila: |
|
|
Če je kdo delal s tem programom ali s pomočjo c jezika in atmega8 bi prosil, da mi pomaga, kajti na internetu je po forumih je kar nekaj primerov, vendar nobveden ni popoln in ne dela, pa tudi drugi potem pišejo da ne dela in podobno, tako da je zmešnjava, prosil bi za pomoč pri sprejemu signala ali lepo opisanem programu v c, predvsem pa najbolj enjostavnim.
Hvala! _________________ Če kaj ne veš, ne sramuj se vprašati! |
|
Nazaj na vrh |
|
|
denci Začetnik
Pridružen/-a: Ned Nov 2005 16:38 Prispevkov: 18
|
Objavljeno: Tor Jul 19, 2011 9:38 am Naslov sporočila: |
|
|
z uporabo interrupta bi bilo verjetno najboljše, proženje bi bilo ob vsaki spremembi fronte, vendar ne vem kako prepoznati, kdaj je nastopila zadnja fronta kdaj prva. če vemo da oddajnih zaniha s frekvenco, pri protokolu sony konkretno z cca 38kHz.
Tako da okrog tega sem malo skeptičen, lotiti s drugih primerov pa bi verjetno potreboval več časa, da razumem program, kot da se ga lotim kar sam. _________________ Če kaj ne veš, ne sramuj se vprašati! |
|
Nazaj na vrh |
|
|
Jure Urednik
Pridružen/-a: Pon Jan 2004 12:51 Prispevkov: 2132 Kraj: Ljubljana
|
Objavljeno: Tor Jul 19, 2011 6:46 pm Naslov sporočila: |
|
|
Denci,
za Codevision ti ne bom znal pomagati, pač pa nekaj drugega: ali si videl ta članek?
Lp
Jure |
|
Nazaj na vrh |
|
|
|