2313 gombok

Hogyan programozzak AVR chipet? Programozók beállításai...
Bascom nyelvű programok...
Avatar
cseri
Újonc
Újonc
Hozzászólások: 3
Csatlakozott: 2009. március 22. vasárnap, 6:00

2313 gombok

Hozzászólás Szerző: cseri »

Sziasztok!

Mostanában kezdtem el próbálkozni AVR-ekkel. Gondoltam hogy pont jó lesz tanulásra egy egyszerűnek tűnő áramkör. Ő nem így gondolja :)

A cél a következő lenne:
egy gombnyomásra led villogtatás elindul, a villogás frekvenciáját timer1 időzítésekre bíztam, fel-le gombokkal timer1pre értéket változtatva többféle frekvenciát tud, start/stop gomb ismételt megnyomására villogtatás leáll

Timer1 időzítések már mennek, ahogy elterveztem, fel-le gombos váltásokon még nem agyaltam, mert a világ minden kincséért sem akar összeállni a start/stop gombos működtetés. Szerencsétlen 2313 már lassan eléri a 10.000. törlési/írási ciklust :)
Számítok a segítségetekre, hogy megértsem ennek a működését.

Előre is köszi,
cseri
Avatar
herc1234
Bitfaragó
Hozzászólások: 459
Csatlakozott: 2007. február 9. péntek, 7:00

Hozzászólás Szerző: herc1234 »

Hát igy nehéz ám azt mondani hogy
rossz a do-loop ciklusod vagy az if feltétel sosem lesz igaz
vagy a diódákat fordítva rajzoltad be a kapcsolókhoz
vagy bármi.
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

Programkód? Kapcsolási rajz? Anélkül max. ötletbörze:( .
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

Start/Stop:
- Prell-re gondoltál?
- én egy bitbe raknám, hogy mit tesz most.....Annak megfelelően fut v. sem a LED villogás.


Tipp: gomb GND-re aktív.

Kód: Egész kijelölése

If pinb.2=0 then
   waitms 10
   If pinb.2=0 then
       if fut=1 then fut=0 else fut=1
   end if
end if
Avatar
cseri
Újonc
Újonc
Hozzászólások: 3
Csatlakozott: 2009. március 22. vasárnap, 6:00

Hozzászólás Szerző: cseri »

Köszi a hozzászólásokat srácok. Valóban kimaradt a programkód, mivel már annyiféle dolgot próbáltam, hogy azt sem tudom hol állt a fejem. Fel kell még fognom a dolog logikáját.

Robert:
A prell-re természetesen gondoltam, hisz minden gombnyomkodós hozzászólásodban, cikkedben azt olvasom, már lassan álmomból felrugdosva is tudom:)
Kipróbáltam az ötleted, majdnem tökéletes, de egy kicsit még bizonytalan a ki-bekapcsolás. Most azt faragom, hogy jó legyen.

Kód: Egész kijelölése

If Pinb.2 = 0 Then
   Waitms 10
   If Pinb.2 = 0 Then
      If Timer1 < 65535 Then Stop Timer1
   Return
   End If
End If
Timer1 bekapcsolt állapotára így hivatkozni jó vagy van korrektebb megoldás is?
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Hozzászólás Szerző: kapu48 »

Megmagyaráznád kicsit mit is, akarsz tenni? Mert ennek így nem sokk értelmét látom.
Ez a feltétel szinte mindig teljesülni fog: „Timer1 < 65535”. Miért ezt választottad?
A Return-nak hol a gosub párja?
Inkább valahogy így:

Kód: Egész kijelölése

Config Pinb.2 = Input                          'B.2 bemenet
Portb.2 = 1                                        'Belső felhúzó R bekapcs.
Dim Fut_t1 As Bit                                'Flag a Timer1 állapotához
Fut_t1 = 0                                          'Fut a Timer1 0 vall jelezzük
Start Timer1

Do
If Pinb.2 = 0 Then                               'Ha nyomják a gombot
   Waitms 10                                       'Kivárjuk a pergés végét
   If Pinb.2 = 0 Then                            'Ha még mindig nyomva
       If Fut_t1 = 1 Then                        'Ha nem fut
         Start Timer1                              'Elindítjuk
       Else
         Stop Timer1                               'Vagy leállítjuk
       End If
   Fut_t1 = Not Fut_t1                           'Flaget negáljuk
   end if
end if
Loop

End                                                    'end program
Egy kis javítás, mivel minden program egyszerűsíthető! :wink:
A hozzászólást 3 alkalommal szerkesztették, utoljára kapu48 2009. március 24. kedd, 13:25-kor.
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

Timer vagy megy, vagy nem...
Remélhetőleg szabadonfutó, így a Start/Stop elég....


kapu48 megoldása korrekt a feladatodra....
Avatar
cseri
Újonc
Újonc
Hozzászólások: 3
Csatlakozott: 2009. március 22. vasárnap, 6:00

Hozzászólás Szerző: cseri »

Köszönöm a segítséget, ezzel mindjárt jobb lett a dolog. Valószínűleg az itthon talált nyomógomb egy /!(%/=, mert picit furán működik, de ezen segítek.

Az előző kódból tényleg kimaradt a gosub, a programomban még benne volt. A „Timer1 < 65535” pedig, ahogy Robert megfejtette, tényleg a timer1 működését lett volna hivatott figyelni.
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

Gombra külső felhúzóellenállás van rakva? Vagy legalább a belső be van kapcsolva?
Gombbal paralell 100 nF kerámiakondi is jót tehet....

De ha tényleg prelles nagyon a gomb, akkor a waitms 10-t növeld meg Waitms 25-re...
Avatar
bgergo
DrótVégénSzéndarab
Hozzászólások: 49
Csatlakozott: 2009. március 11. szerda, 6:00

Hozzászólás Szerző: bgergo »

Egy bemenet (nyomógomb) fordított állapotát szeretném egy másik lábon kiírni(led). Van erre valami egyszerű parancs?
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

Kód: Egész kijelölése

dim A as bit
config pinc.2=input
config pinc.3=output
a=pinc.2 'erre vagyok kivancsi
a=not a 'invertálás
portc.3=a
end

Talán jó ez is (nem próbáltam!):

Kód: Egész kijelölése

config pinc.2=input
config pinc.3=output
portc.3= not pinc.2
end
Avatar
bgergo
DrótVégénSzéndarab
Hozzászólások: 49
Csatlakozott: 2009. március 11. szerda, 6:00

Hozzászólás Szerző: bgergo »

Jó a második is! Köszönöm!
Avatar
bgergo
DrótVégénSzéndarab
Hozzászólások: 49
Csatlakozott: 2009. március 11. szerda, 6:00

Hozzászólás Szerző: bgergo »

Üdv.!

Szeretnék egy gombnak több funkciót adni, mégpedig úgy, hogy ha: -egyszer gyorsan nyomom -> set valami
-nyomvatartom -> set valami más
csak nem tudom, hogy válasszam szét a két funkciót.
Valami kiindulási alapot megköszönnék!
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

ha megnyomod jelzobit=1
waitms 500
ha meg nyomod, akkor valamit tesz, ha nem, akkor lsd elozo....
Avatar
bgergo
DrótVégénSzéndarab
Hozzászólások: 49
Csatlakozott: 2009. március 11. szerda, 6:00

Hozzászólás Szerző: bgergo »

akkor valahogy így?:

Kód: Egész kijelölése

If Gomb = 0 Then 
  waitms 500
  If Gomb=0 then A=A+1 Else Flag=1
End If

 
Válasz küldése