Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
bukovinsky Član

Pridružen-a: Sob 07 Okt 2006 14:21 Prispevkov: 58 Aktiv.: 0.25
|
Objavljeno: Pet Apr 10, 2009 7:51 pm Naslov sporočila: Programiranje atmega88 |
|
|
Pozdravljeni!
Želel bi sprogramirati omenjeni čip , da ima 12 vhodov ter 4 izhode.
oziroma 16 vhodov ter 4 izhodi. Jaz jih bom uporabil samo 12.
Opravljati mora pa sledeče :
Obstaja kakšen zelo preprost stavek bascom
pravilnostna tabela
Opis: |
|
Velikost datoteke: |
19.43 KB |
Pogledana: |
8801 krat |

|
|
|
Nazaj na vrh |
|
 |
dkone Član

Pridružen-a: Sre 07 Mar 2007 18:53 Prispevkov: 2116 Aktiv.: 9.51 Kraj: Krško
|
Objavljeno: Pet Apr 10, 2009 8:26 pm Naslov sporočila: Re: Programiranje atmega88 |
|
|
bukovinsky je napisal/a: |
Pozdravljeni!
Želel bi sprogramirati omenjeni čip , da ima 12 vhodov ter 4 izhode.
oziroma 16 vhodov ter 4 izhodi. Jaz jih bom uporabil samo 12.
Opravljati mora pa sledeče :
Obstaja kakšen zelo preprost stavek bascom
pravilnostna tabela |
.... Kaj pa?
_________________ Denis |
|
Nazaj na vrh |
|
 |
bukovinsky Član

Pridružen-a: Sob 07 Okt 2006 14:21 Prispevkov: 58 Aktiv.: 0.25
|
Objavljeno: Pet Apr 10, 2009 9:07 pm Naslov sporočila: |
|
|
Kaj je cilj. -> zmanjšati število signalov iz 16 na 4
|
|
Nazaj na vrh |
|
 |
Sokrat Član


Pridružen-a: Čet 25 Avg 2005 11:00 Prispevkov: 5584 Aktiv.: 23.57
|
Objavljeno: Pet Apr 10, 2009 9:37 pm Naslov sporočila: |
|
|
Ce postavljas tako vprasanje, potem verjetno nimas izkusenj s programirnjem, zato ne razumem zakaj rines v tako resitev. Seveda se da tudi tako narediti.
Alternativa z eno komponentno je 64 Kb EPROMcek, alternativa z dvema, a brez kakrsnegakoli programiranja, pa 2x 74*148, a ta ne omogoca zaznavanja nedovoljenega stanja (tvoje "zmanjsevanje" stevila linij tudi pomeni zamnjsevanje kolicine posredovanih informacij, kar je lahko problem - odvisno od aplikacije).
_________________ Ka ti bo pa torba ce si kupu kolo ? |
|
Nazaj na vrh |
|
 |
dkone Član

Pridružen-a: Sre 07 Mar 2007 18:53 Prispevkov: 2116 Aktiv.: 9.51 Kraj: Krško
|
Objavljeno: Sob Apr 11, 2009 9:13 am Naslov sporočila: |
|
|
bukovinsky je napisal/a: |
Kaj je cilj. -> zmanjšati število signalov iz 16 na 4  |
Lahko bi naredil tudi z kakšno programeljivo logiko,naprimer GAL. Več poglej na netu. Sicer pa bi lahko uporabil kar navadne multipleksorje,kot ti je že Sokrat omenil.
_________________ Denis |
|
Nazaj na vrh |
|
 |
jvolk Član



Pridružen-a: Ned 05 Mar 2006 1:14 Prispevkov: 737 Aktiv.: 3.14 Kraj: okolica Divače
|
Objavljeno: Sob Apr 11, 2009 10:14 am Naslov sporočila: |
|
|
HC154 ali HC4515 bi tudi znal kaj takega naredili.. mogoče bi bilo še potrebno invertirati izhode
|
|
Nazaj na vrh |
|
 |
bukovinsky Član

Pridružen-a: Sob 07 Okt 2006 14:21 Prispevkov: 58 Aktiv.: 0.25
|
Objavljeno: Pon Apr 13, 2009 10:41 am Naslov sporočila: |
|
|
Ja, sem pregledal nazadnje omenjeni 74hc154. To je 4 to 16 line decoder/demultiplexer. Žal ima 4 vhode in 16 izhodov, jaz potrebujem 16 vhodov in 4 izhode. Delovanje pa je takšno ,kot bi jaz potreboval. Ker imam vedno samo EDEN vhod HIGH ali LOW in to bi spremenil v binarno
|
|
Nazaj na vrh |
|
 |
bukovinsky Član

Pridružen-a: Sob 07 Okt 2006 14:21 Prispevkov: 58 Aktiv.: 0.25
|
Objavljeno: Pet Apr 17, 2009 8:07 pm Naslov sporočila: |
|
|
Tole je programček napisan za atmega88.
$regfile = "m88def.dat"
$crystal = 24000000
Config Portb = Input 'port b - vhodi
Config Portc = Output 'port c - izhodi
Config Portd = Input 'port d - vhodi
Do
If Pind.0 = 1 Then 'orodje 1
Portc = &B00000000
End If
If Pind.1 = 1 Then 'orodje 2
Portc = &B00000001
End If
If Pind.2 = 1 Then 'orodje 3
Portc = &B00000010
End If
If Pind.3 = 1 Then 'orodje 4
Portc = &B00000011
End If
If Pind.4 = 1 Then 'orodje 5
Portc = &B00000100
End If
itn ........ do orodja 12
Programček mi deluje vendar prihaja do spremembe stanja na izhodu z zakasnitvijo
???????
V čem je problem ,.., zakaj zakasnitev ????
Kako lahko rešim problem?
Lep pozdrav
|
|
Nazaj na vrh |
|
 |
MAAG Član

Pridružen-a: Čet 26 Jun 2008 14:18 Prispevkov: 178 Aktiv.: 0.86 Kraj: SG-MB
|
Objavljeno: Pet Apr 17, 2009 10:07 pm Naslov sporočila: |
|
|
Kaksnega reda je ta zakasnitev?
bukovinsky je napisal/a: |
...
$crystal = 24000000
...
|
Imas pravi kristal? 24Mhz mi je malce veliko, glede na to, da na Atmelovi strani pise, da je max 20Mhz.
_________________ Samo da se kadi  |
|
Nazaj na vrh |
|
 |
bukovinsky Član

Pridružen-a: Sob 07 Okt 2006 14:21 Prispevkov: 58 Aktiv.: 0.25
|
Objavljeno: Pet Apr 17, 2009 10:49 pm Naslov sporočila: |
|
|
Hmm, delovanje sem preizkusil brez kristala. Bi to lahko bil razlog za takšno obnašanje ?
zakasnitev traja tudi nekaj sekund ... mislim da tja do 5 kar je zares veliko .
|
|
Nazaj na vrh |
|
 |
MAAG Član

Pridružen-a: Čet 26 Jun 2008 14:18 Prispevkov: 178 Aktiv.: 0.86 Kraj: SG-MB
|
Objavljeno: Sob Apr 18, 2009 12:29 am Naslov sporočila: |
|
|
Mogoce, glede na to, da pricakuje hitrost 24Mhz, dobi pa tistih 1Mhz( glede tocne frekvence nisem preprican, je se nisem uporabljal ), kolikor ima pac interno.
_________________ Samo da se kadi  |
|
Nazaj na vrh |
|
 |
logist Član

Pridružen-a: Pon 25 Jan 2010 1:12 Prispevkov: 126 Aktiv.: 0.67 Kraj: dom(o)vina
|
Objavljeno: Pon Jan 09, 2012 12:49 am Naslov sporočila: |
|
|
Mene pa zanima, zakaj se mi to dogaja, če v programu v glavni zanki uporabim _delay_us(1) se program lepo izvaja, če pa jo ven vržem pa je tema ni nič
Še koda glavnega programa :
Koda: |
int main(void)
{
PORTC=0x0F;
DDRC=0x00;
PORTD=0x10;
DDRD=0x10;
// iniclizacija twi-slave moda
TWI_Slave_init(TWI_HW_Address());
// inicilizacija prekinitve za PS/2 Clock (INT1 @ ATmega88)
ps2_init();
sei();
while(1){
PORTD|=(1<<PD4);
if(ps2_stop){
TWI_Check_Address(TWI_HW_Address());
twi_tx_data=DecodeScan(ps2_data);
ps2_stop=0;
PORTD&=~(1<<PD4);
}
_delay_us(1);
}
return 0;
} |
Frekvenco imam 8MHz zunaji kristal.
Sem pa mi tudi dogaja to, ko izklopim napajanje na vezju se program ne požene dokler ne stisnem tipke reset, potem pa dela.
Hvala.
EDIT : napajan pa preko starega računalniškega napajalnika.
_________________ Mihael |
|
Nazaj na vrh |
|
 |
protoncek Član

Pridružen-a: Sre 31 Jan 2007 9:41 Prispevkov: 9573 Aktiv.: 42.79 Kraj: Mengeš
|
Objavljeno: Pon Jan 09, 2012 9:51 am Naslov sporočila: |
|
|
sicer nisem v C-ju ampak ker vidim da imaš serijsko komunikacijo: ponavadi zunanja naprava rabi nekaj časa da se stabilizira, potem šele odgovarja. Zato z zakasnitvijo dela. Podobne probleme sem imel sam z UZ merilnikom, ki ima serijsko komunikacijo - te pavze so morale biti zelo natančno določene.
DS1820 npr. rabi dobre pol sekunde da konvertira temperaturo in jo lahko prebereš...
|
|
Nazaj na vrh |
|
 |
logist Član

Pridružen-a: Pon 25 Jan 2010 1:12 Prispevkov: 126 Aktiv.: 0.67 Kraj: dom(o)vina
|
Objavljeno: Pon Jan 09, 2012 12:37 pm Naslov sporočila: |
|
|
Program sploh ne uporablja serijske komunikacije. Uporablja samo I2C vodilo v slave načinu. Ter kratko rutina na prekinitev INT0, ki pa se sproži samo ko stisnem tipko na tipkovnici (PS/2 tipkovnica) in prebrani byte pošlje naprej po i2c masterju. To pa je vse kar program počne
_________________ Mihael |
|
Nazaj na vrh |
|
 |
protoncek Član

Pridružen-a: Sre 31 Jan 2007 9:41 Prispevkov: 9573 Aktiv.: 42.79 Kraj: Mengeš
|
Objavljeno: Pon Jan 09, 2012 2:16 pm Naslov sporočila: |
|
|
saj I2C je ena sorta serijske komunikacije... s kom pa komunicira preko tega vodila?
|
|
Nazaj na vrh |
|
 |
|