atmega8 program nepracuje spravne

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

Moderátor: Moderátoři

Zpráva
Autor
Uživatelský avatar
mato1168
Příspěvky: 67
Registrován: 26 led 2013, 01:00

atmega8 program nepracuje spravne

#1 Příspěvek od mato1168 »

Caute spravil som si jednoduchy program v bascome pre na ovladanie 8 lediek s 5 tlacitkami. Kazdym tlacitkom sa zapne urcita kombinacia lediek a jedno tlacitko je na reset.Schemu a program som najprv odsimuloval v proteuse a potom som si to postavil na kontaktnom poli. V proteuse fungovalo vsetko ok ale na kontaktnom poli sa mi rozsvietia ledky a nereaguje to na ziadne tlacitko okrem resetu ktory ledky zhasne a ked tlacitko pustim tak ledky sa rozsvietia.
Program mam takyto :

Kód: Vybrat vše





$regfile = "m8def.dat"
$crystal = 4000000
$hwstack = 40
$swstack = 16
$framesize = 32

Config Portc.0 = Output                                     'hl.n biela
Config Portc.1 = Output                                     'hl.n cervena
Config Portc.2 = Output                                     'hl.n biela
Config Portc.3 = Output                                     'hl.n Z
Config Portd.0 = Output                                     'opakovacie biela
Config Portd.1 = Output                                     'opakovacie modra
Config Portd.2 = Output                                     'opakovacie biela
Config Portd.3 = Output                                     'opakovacie Z
Config Portb.0 = Input                                      'tlacit zakazane
Config Portb.1 = Input                                      'tlacit pomaly
Config Portb.2 = Input                                      'tlacit rychlejsie
Config Portb.3 = Input                                      'tlacit spat
Do
If Pinb.0 = 1 Then
Portc.1 = 1
Portd.1 = 1
End If
If Pinb.1 = 1 Then
Portc.0 = 1
Portc.2 = 1
Portd.0 = 1
Portd.2 = 1
End If
If Pinb.2 = 1 Then
Portc.0 = 1
Portd.0 = 1

End If
If Pinb.3 = 1 Then
Portc.1 = 1
Portc.3 = 1
Portd.1 = 1
Portd.3 = 1
End If

Loop
 End                                        
a schema je v prilohe na obrazku
Ako treba upravit program aby obvod fungoval podla schemy? Schemu by som nerad menil ak to nebude treba. Myslim ze by stacilo v programe zmenit 1 na 0 pri tlacitkach cize if pinb.3=0 napr. ale niesom si isty ci to bude stacit tak chcem pocut radu od skusenejsich. Robim to ako doplnenie k soč.
Přílohy
soč.jpg
(88.94 KiB) Staženo 101 x

Uživatelský avatar
monterjirka
Příspěvky: 2761
Registrován: 14 čer 2003, 02:00
Bydliště: Blížejov

#2 Příspěvek od monterjirka »

Chudák "ATMEGA", ty výstupy na LED se mi moc nelíbí. Měl by tam být odpor na omezení proudu, procesor sice má nějaké omezení proudu na výstupech, ale jednak to zvyžuje výkonové zatížení obvodu a u více výstupů se to nasčítá a může to být dost a z hlediska slušného konstrúktéra je to "prasárna".
Já s ATMEGA nemám velké zkušenosti, ale neměly by ty PINy pro tlačítka být definované jako vstupy a mít SW zapnuté interní PullUp rezistory, když už tam nejsou externí?

Uživatelský avatar
mato1168
Příspěvky: 67
Registrován: 26 led 2013, 01:00

#3 Příspěvek od mato1168 »

Samozrejme odpory tam maju byt aj ich mam na kontaktnom poli.Tlacitka su ako vstupy,je to na zaciatku programu ak tam ma este nieco byt tak poradte co treba doplnit.Dakujem

Uživatelský avatar
monterjirka
Příspěvky: 2761
Registrován: 14 čer 2003, 02:00
Bydliště: Blížejov

#4 Příspěvek od monterjirka »

Tu definici jsem přehlédl, já jsem hledal definice Pin...
Ale pak mi není jasné proč se program dotazuje na stav
Pinb.0 když jako vstup má definován Portb.0
Pochopí to překladač?

Uživatelský avatar
mato1168
Příspěvky: 67
Registrován: 26 led 2013, 01:00

#5 Příspěvek od mato1168 »

Ak prekladac myslis ze ci to skompilovalo tak ano skompilovalo bez problemov mozem to skusit prepisat na portb ale mam knihu programovania bascom stiahnutu a tam je pinb ale zapojenie je trochu ine tlacitka su pripojene este cez odpor k napajaniu a to som vynechal malo by to fungovat aj takto skusal som iny obvod kde su tlacitka len uzemnene a ten fungoval

Uživatelský avatar
nekmil
Příspěvky: 780
Registrován: 06 bře 2005, 01:00
Bydliště: Havířov

#6 Příspěvek od nekmil »

Za to "schéma" si dej pár facek. O jakých odporech hovoříš u "LED" nebo na vstupech ?

Uživatelský avatar
mato1168
Příspěvky: 67
Registrován: 26 led 2013, 01:00

#7 Příspěvek od mato1168 »

Schema je narychlo spravena odpory su pri ledkach samozrejme.par faciek si nedam nemam preco a pri napajacich pinoch mam kondezator medzi vcc a gnd
Naposledy upravil(a) mato1168 dne 06 pro 2014, 19:29, celkem upraveno 1 x.

Uživatelský avatar
procesor
Příspěvky: 5284
Registrován: 02 říj 2009, 02:00
Bydliště: PO

#8 Příspěvek od procesor »

a/ Treba všetkých 8 výstupov nastavovať do 1 aj do 0.
b/ If Pin...x=0!!!, alebo zmeniť spínacie na rozpínacie tlačítko.
Naposledy upravil(a) procesor dne 06 pro 2014, 19:34, celkem upraveno 1 x.

Uživatelský avatar
mato1168
Příspěvky: 67
Registrován: 26 led 2013, 01:00

#9 Příspěvek od mato1168 »

Ak som to spravne pochopil na zaciatku mam vsetky vystupy dat na 0 a ostatne moze ostat ako je?treti krat opakujem odpory mam zapojene na kontaktnom poli pri ledkach

Uživatelský avatar
procesor
Příspěvky: 5284
Registrován: 02 říj 2009, 02:00
Bydliště: PO

#10 Příspěvek od procesor »

Ešte ten príkaz if Portc.0=1 zmeň ...Portc.0=0
Zapisuj v každom if.... ifend aj do nuly, ktoré nemajú svietiť.
Ak všetky dáš do nulý na začiatku "do" nič nebude svietiť. Exaktne iba na kratučký okamih zablikne požadovaná kombinácia.
Naposledy upravil(a) procesor dne 06 pro 2014, 19:42, celkem upraveno 2 x.

Uživatelský avatar
mato1168
Příspěvky: 67
Registrován: 26 led 2013, 01:00

#11 Příspěvek od mato1168 »

Ten if zmenim aj som to pisal na zaciatku ze si myslim ze to ma byt na 0 ale ze niesom si tym isty takze to zmenim a otestujem a dam vediet ci to ide zatial dakujem

Uživatelský avatar
mato1168
Příspěvky: 67
Registrován: 26 led 2013, 01:00

#12 Příspěvek od mato1168 »

Tak rychlo som to cez mobil upravil ma to byt teda takto?

Kód: Vybrat vše

$regfile = "m8def.dat" 
$crystal = 4000000 
$hwstack = 40 
$swstack = 16 
$framesize = 32 

Config Portc.0 = Output                                     'hl.n biela 
Config Portc.1 = Output                                     'hl.n cervena 
Config Portc.2 = Output                                     'hl.n biela 
Config Portc.3 = Output                                     'hl.n Z 
Config Portd.0 = Output                                     'opakovacie biela 
Config Portd.1 = Output                                     'opakovacie modra 
Config Portd.2 = Output                                     'opakovacie biela 
Config Portd.3 = Output                                     'opakovacie Z 
Config Portb.0 = Input                                      'tlacit zakazane 
Config Portb.1 = Input                                      'tlacit pomaly 
Config Portb.2 = Input                                      'tlacit rychlejsie 
Config Portb.3 = Input                                      'tlacit spat 
Do 
Portc.0=0
Portc.1=0
Portc.2=0
Portc.3=0
Portd.0=0
Portd.1=0
Portd.2=0
Portd.3=0
If Pinb.0 = 0Then 
Portc.1 = 1 
Portd.1 = 1 
End If 
If Pinb.1 = 0 Then 
Portc.0 = 1 
Portc.2 = 1 
Portd.0 = 1 
Portd.2 = 1 
End If 
If Pinb.2 = 0 Then 
Portc.0 = 1 
Portd.0 = 1 

End If 
If Pinb.3 = 0 Then 
Portc.1 = 1 
Portc.3 = 1 
Portd.1 = 1 
Portd.3 = 1 
End If 

Loop 
 End                                       

Uživatelský avatar
nekmil
Příspěvky: 780
Registrován: 06 bře 2005, 01:00
Bydliště: Havířov

#13 Příspěvek od nekmil »

"kondezator medzi vcc a gnd" v tomto případě je zcela bezvýznamná informace.
Vem si voltmetr a zmeraj napětí na pinu kde máš nějaké tlačítko.

Uživatelský avatar
mato1168
Příspěvky: 67
Registrován: 26 led 2013, 01:00

#14 Příspěvek od mato1168 »

Ked budem doma tak to mozem zmerat teraz pisem z mobilu

Uživatelský avatar
mato1168
Příspěvky: 67
Registrován: 26 led 2013, 01:00

#15 Příspěvek od mato1168 »

procesor píše:Ešte ten príkaz if Portc.0=1 zmeň ...Portc.0=0
Zapisuj v každom if.... ifend aj do nuly, ktoré nemajú svietiť.
Ak všetky dáš do nulý na začiatku "do" nič nebude svietiť. Exaktne iba na kratučký okamih zablikne požadovaná kombinácia.
aha takze tam mam teda vypisat ostatne a dat ich na 0 doma to spravim teraz pisem z mobilu

Odpovědět

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