Stránka 1 z 3

atmega8 program nepracuje spravne

Napsal: 06 pro 2014, 18:10
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č.

Napsal: 06 pro 2014, 18:48
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í?

Napsal: 06 pro 2014, 19:05
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

Napsal: 06 pro 2014, 19:15
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č?

Napsal: 06 pro 2014, 19:20
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

Napsal: 06 pro 2014, 19:22
od nekmil
Za to "schéma" si dej pár facek. O jakých odporech hovoříš u "LED" nebo na vstupech ?

Napsal: 06 pro 2014, 19:27
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

Napsal: 06 pro 2014, 19:29
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.

Napsal: 06 pro 2014, 19:31
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

Napsal: 06 pro 2014, 19:35
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.

Napsal: 06 pro 2014, 19:38
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

Napsal: 06 pro 2014, 19:44
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                                      

Napsal: 06 pro 2014, 19:46
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.

Napsal: 06 pro 2014, 19:47
od mato1168
Ked budem doma tak to mozem zmerat teraz pisem z mobilu

Napsal: 06 pro 2014, 19:50
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