egyszerü nyomógomb

Hogyan programozzak AVR chipet? Programozók beállításai...
Bascom nyelvű programok...
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3349
Csatlakozott: 2008. augusztus 29. péntek, 6:00
Tartózkodási hely: Újkígyós

HozzászólásSzerző: kapu48 » 2009. szeptember 21. hétfő, 17:00

PortD.5 = 1 'Felhúzó ell. bekapcs

Avatar
szovhoz
Bitfaragó
Hozzászólások: 608
Csatlakozott: 2007. április 7. szombat, 6:00
Kapcsolat:

HozzászólásSzerző: szovhoz » 2009. szeptember 21. hétfő, 17:04

ezt tudtam azt hittem van valami más parancs. De nem segített .

ellenálások jók kondik jók.

Hogyan tud egy kapcsoló a proci más kimenetein magas/alacsony szintet generálni??

ha át tenném ezt a gombot int0-ra az segítene? Mert max egy kicsit átszabom a panelt!

Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3349
Csatlakozott: 2008. augusztus 29. péntek, 6:00
Tartózkodási hely: Újkígyós

HozzászólásSzerző: kapu48 » 2009. szeptember 21. hétfő, 17:15

Még ezt próbáldmeg:

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

$regfile = "m88def.dat"

' input ------------------------------------------------------------------------

Config Pinb.0 = Input                                       'L1-L2 IN
Config Pinb.1 = Input                                       'L1-L3 IN

Config Pinc.0 = Input                                       'ADC SZIRÉNA FIGYELŐ  CHANNEL 0
Config Pinc.1 = Input                                       'ADC AKKU CHANNEL 1

Config Pind.5 = Input                                       'INT Reset gomb
Config Pind.7 = Input                                       'L2-L3 IN
Portb.0 = 1
Portb.1 = 1
Portc.0 = 1
Portc.1 = 1
Portd.5 = 1
Portd.7 = 1
'OUTPUT ------------------------------------------------------------------------

Config Portb.2 = Output                                     'RIASZT RELÉ

Config Portc.2 = Output                                     'KIKAPCSOLÁS FET
Config Portc.3 = Output                                     'FÁZIS OK LED
Config Portc.4 = Output                                     'L2-L3 LED
Config Portc.5 = Output                                     'L1-L2 LED

Config Portd.0 = Output                                     'L1-L3 LED
Config Portd.1 = Output                                     'BUZZER

Config Portd.6 = Output                                     'VEZÉRLŐ HIBA LED



'INPUT ALIAS -------------------------------------------------------------------

Resetgomb Alias Pind.5
L2l3in Alias Pind.7
L1l2in Alias Pinb.0
L1l3in Alias Pinb.1


' OUTPUT ALIAS -----------------------------------------------------------------

Vezerlohibaled Alias Portd.6
Riasztrele Alias Portb.2
Poweroff Alias Portc.2
Fazisokled Alias Portc.3
L2l3led Alias Portc.4
L1l2led Alias Portc.5
L1l3led Alias Portd.0
Buzzer Alias Portd.1

' ÉRTÉKADÁS --------------------------------------------------------------------

Riasztrele = 1
Poweroff = 1
Vezerlohibaled = 1
L2l3led = 0
L1l2led = 0
L1l3led = 0


' START MAIN PROGRAM -----------------------------------------------------------
Dim Fazisokled_t As Bit  'Led állapotjelző

Do
If Resetgomb = 0 Then
   Waitms 75
   If Resetgomb = 0 Then
      If Fazisokled_t = 1 Then
         Fazisokled = 1
         Fazisokled_t = 0
      Else
         Fazisokled = 0
         Fazisokled_t = 1
      End If
   End If
  Bitwait Pind.5 , Set                                      ' vár gombelengedésig - opcionálisan használható
End If

Loop

Avatar
Robert
Elektronbűvölő
Hozzászólások: 10064
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

HozzászólásSzerző: Robert » 2009. szeptember 21. hétfő, 21:07

szovhoz írta:a szoftot ideiglenesen írtam be nem rossz az ha nem írok a prociba programot csak a gombot magában nyomkodom akkor is ezt csinálja!!!!

van külső ellenállás!

Milyen paranccsal aktiválod a belsőt?

Előtte utánna kondizva 7805.

belső 8mhz-es kvarcról jár nem kell nekem hogy kristálypontos legyen.

De ha belsőről jár azt nem kell a szoftba írni elegendő az avr studioban beállítani!

Ez csak próba program.


Hogy mi van?
A $crystal az adja meg az alapfrekit!
A bascom az _összes_ időzítést ebből számolja. Alapesetben 1MHz a Bascomban. Így ha 8ról járatod, minden időzítésed 1/8-nyi a valóságban!
A prell kivárásod így a 75msec helyett 75/8=~10msec! ez épp határon van roszabb kapcsolónál...
Ha van külső felhúzó, akkor nem kell belső.

Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3349
Csatlakozott: 2008. augusztus 29. péntek, 6:00
Tartózkodási hely: Újkígyós

HozzászólásSzerző: kapu48 » 2009. szeptember 22. kedd, 11:36

Kösz Róbert!

Ha erre az alapvető hibára én írom ugyanezt nekem, nem hiszik el!
Ezért már inkább a válasz: „OK te tudod”
:twisted:

Avatar
szovhoz
Bitfaragó
Hozzászólások: 608
Csatlakozott: 2007. április 7. szombat, 6:00
Kapcsolat:

HozzászólásSzerző: szovhoz » 2009. szeptember 22. kedd, 17:57

Róbert egyik hozásszólásában olvastam, hogy ha belső kristályról járatom akkor nem kell a parancsot betenni és én ebben a hitben élek azóta.

De akkor bocs hogy nem jól tudtam rossz infót kaptam, itt a fórumon.

Viszont ez nem lényeges, az a lényeg hogy a gomb bementére tettünk egy ellenálást ,a panerla és megszünt a hiba.

Ez mitől van ezt mondjátok meg nekem?

Avatar
SirLeslie
Pákabűvész
Hozzászólások: 247
Csatlakozott: 2005. április 14. csütörtök, 6:00
Tartózkodási hely: Zalaegerszeg
Kapcsolat:

HozzászólásSzerző: SirLeslie » 2009. szeptember 22. kedd, 18:45

szovhoz írta:...
Viszont ez nem lényeges, az a lényeg hogy a gomb bementére tettünk egy ellenálást ,a panerla és megszünt a hiba.

Ez mitől van ezt mondjátok meg nekem?


Gondolom a környező zavarokat összeszedhette...
Nemrég próbáltam: szintén zavaros/bizonytalan bemenetérzékelés, de nem volt lehetőség hirtelen ellenállást betenni: programból beolvasás előtt az adott bemeneti lábat átkonfigoltam kimenetnek, majd vissza bemenetnek és csak ezután olvastam be - nagyon stabil lett.

Avatar
Bence
Tranzisztorgyógyász
Hozzászólások: 166
Csatlakozott: 2007. október 30. kedd, 6:00
Tartózkodási hely: Budapest

HozzászólásSzerző: Bence » 2009. december 5. szombat, 19:26

Bence írta:Hello!

És szerintem:

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

Config Pinb.5 = Output 'helyett
Config Portb.5 = Output 'ezt használd


Ma ezzel nagyon sokat szívtam... Bemenethez véletlenül PORT-ot írtam és nem működött. Már mindent átprogramoztam, nem működik, erre megnézem és látom hogy "Config PORTB.0 = Input". Gondoltam magamban, de hülye vagyok. Átírtam és működik! :D
Bocs, hogy ezt leírtam, de hátha valaki tanul a hibámból.
Bence

Avatar
szepnorbee
Bitmanipulátor
Hozzászólások: 122
Csatlakozott: 2009. augusztus 31. hétfő, 6:00

HozzászólásSzerző: szepnorbee » 2010. január 17. vasárnap, 21:05

Üdv! ADC lábakat használhatok pl. nyomógomb bemeneteknek? pl. a tápfeszről egy felhuzó ellenáláson át egy mikrokapcsolóval sorba kötve egy ADC lábon tudok megszakítást generálni? Ha az ADC lábra magas szintet teszek (ref.fesz) akkor pl. megnöveli egy áltozó értékét.

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

dim a as byte
a=1
Enable Interrupts
Enable adc

On adc(1) M2
M1:
do
lcd "ertek:" ; a
waitms 500
cls
loop

M2:
Incr a
goto M1


Lehetséges ez így? Vagy ha nem, hogy lehet adc-vel megszakítást generálni? Ezt nem találom a könyvben. Köszi

Avatar
Robert
Elektronbűvölő
Hozzászólások: 10064
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

HozzászólásSzerző: Robert » 2010. január 18. hétfő, 5:38

ADC nem INTképes M8 esetén. Mx8 (48/88/168/328) esetén van un. PCINT megszakítás, ami lábanként kezelhető...

Miért kell INT a számolásra?
Tessék a főprogram Do-Loop ciklusába berakni, ott sima portvizsgálattal is megy....

Avatar
szepnorbee
Bitmanipulátor
Hozzászólások: 122
Csatlakozott: 2009. augusztus 31. hétfő, 6:00

HozzászólásSzerző: szepnorbee » 2010. január 18. hétfő, 8:47

Akkor például ez ami az első oldalon van, egy portvizsgálat?

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

$regfile = "m8def.dat"                                      'proci: AtMega8
$crystal = 8000000                                          'belső órajel

Config Pinb.5 = Output                                      'kimenet: LED
Config Pind.0 = Input                                       'bemenet: Nyomógomb

Portd.0 = 1                                                 'belső felhúzó ellenállás bekapcsol

dim kapcsoloallapot as bit ' állapotjelző bit használata
                                                             'főprogram
Do
                                                             'feltétel
   If Pind.0 = 0 and kapcsoloallapot=0 Then

    Portb.5 = 1
    set kapcsoloallapot ' állapotjelzés átváltása
    Waitms 500
    bitwait pind.0, set ' vár gombelengedésig - opcionálisan használható
   End If


   If Pind.0 = 0 and kapcsoloallapot=1 Then

    Portb.5 = 0
    reset kapcsoloallapot ' állapotjelzés átváltása
    Waitms 500
    bitwait pind.0, set ' vár gombelengedésig - opcionálisan használható
   End If                                                   'feltétel vége


Loop                                                        'főprogram vége

End 


Ez így működőképes? Nekem ebben az nem tiszta, hogy a kapcsoloallapot változó értéke mitől változik meg, ha mindkét IF.... THEN feltétel között Pind.0 = 0 van ? Nem 255-nek kellene lennie az egyiknek? Másik kérdés, ilyenkor a kapcsolót hogyan kell az AVR-re kötni? Mekkora ellenálás kell sorba az 5V-ról? Vagy GND-hez képest érzékel? Bocsássátok meg nekem, még nagyon tanuló vagyok, ugyhogy egy egyszerű nyomógomb is tud nagyon bonyolult lenni :)

Avatar
Robert
Elektronbűvölő
Hozzászólások: 10064
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

HozzászólásSzerző: Robert » 2010. január 18. hétfő, 10:15

Pinx.y állapota 1 vagy 0 (1 láb)
Pinx állapota 0...255 lehet (teljes port (8láb)).

Kapcsoló bekötés:
Láb és GND közé kapcsoló, láb és +5V közé 1k...10k (a belső felhúzó helyettesít(het)i.
Láb és GND közé (kapcsolóval paralell) 100nF kerámiakondi (prellmentesít)

Avatar
szepnorbee
Bitmanipulátor
Hozzászólások: 122
Csatlakozott: 2009. augusztus 31. hétfő, 6:00

HozzászólásSzerző: szepnorbee » 2010. január 18. hétfő, 10:36

Akkor a 10nF-el ez a sor elhagyható?

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

Portd.0 = 1


Azt hiszem félreértettem ezt a programot. Ez egy darab nyomógombot valósít meg, mintha egy billenőkapcsoló lenne. Egy gombnyomás, bekapcs a led, mégegy gombnyomás, kikapcs a led. Tehát a portd.0 alapállapotban magas szinten van, és amikor én megnyomom a gombot, akkor alacsony szintre húzom és a program e szerint jár el. Jól értelmezem? Én azt szeretném elérni, hogy 2 mikrokapcsolóvan tudnék egy változóértéket negatív ill. pozitív irányba változtatni.
Így életképes?

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

$regfile = "m8def.dat"                                      'proci: AtMega8
$crystal = 4000000                                          'belső órajel

Config Pind.0 = Input
Config Pind.1 = Input                                       'bemenet: Nyomógombok

Dim A As Byte
A = 0
                                                             'főprogram
Do
                                                             'feltétel
   If Pind.0 = 0 Then
    Incr A
    Waitms 20
   bitwait pind.0, set
   End If


   If Pind.1 = 0 Then
    Decr A
    Waitms 20
   bitwait pind.1, set
   End If                                                   'feltétel vége

If A <= 0 Then A = 0
If A >= 250 Then A = 250                                    'min, max érték

Locate 1 , 1
Lcd "ertek:" ; A
Loop                                                        'főprogram vége

End

Avatar
Robert
Elektronbűvölő
Hozzászólások: 10064
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

HozzászólásSzerző: Robert » 2010. január 18. hétfő, 15:30

Igen így a fel/lefele számolás OK (ránézésre, kipróba nélkül)

Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3349
Csatlakozott: 2008. augusztus 29. péntek, 6:00
Tartózkodási hely: Újkígyós

HozzászólásSzerző: kapu48 » 2010. január 18. hétfő, 16:13

Tennék pár észrevételt!

Ha : Dim A As Byte értéke 0 … 255 értéket vehet fel,
akkor már 0-ánál kisebb (-) nem lehet!
Tehát ez a feltétel vizsgálat nem jó: If A <= 0 Then A = 0

Ha A = 0, után : Decr A, (255 = 0 -1) A = 255 lesz
Vagyis vagy: If A = 0 Then A = 1, Vagy: If A = 255 Then A = 0


:wink:
A hozzászólást 1 alkalommal szerkesztették, utoljára kapu48 2010. január 18. hétfő, 16:48-kor.


Vissza: “Bascom-AVR nyelvű programozás (AVR programozásának lehetőségei)”

Ki van itt

Jelenlévő fórumozók: nincs regisztrált felhasználó valamint 1 vendég