Szemafor LED

Hogyan programozzak AVR chipet? Programozók beállításai...
Bascom nyelvű programok...
Avatar
djusee
DrótVégénSzéndarab
Hozzászólások: 45
Csatlakozott: 2009. április 18. szombat, 6:00

Szemafor LED

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

Hello. Én is nagyon kezdö lennék,nem akartam uj témát nyitni ezért irok ide. Elkezdtem a ledvillogóval és akartam picit változtatni rajta hogy ugy müködjön mint egy (nálunk ugy hivják) szemafor.Ez sikerült is, de akrtam még komplikálni hogy jo lenne ha lenne 2 kapcsolóm és ha mondjuk A kapcsolot megnyomom akkor müködik normál módban, ha B kapcsolót nyomom meg akkor pediglen csak pislog az egyik led.De ez nem megy,nemtudok rájönni a parancsokra illetve a logikára hogy hogyan irjam :(
Mit rontottam el? Az egészet? :D

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

$regfile = "ATtiny2313.dat"
$crystal = 4000000

Config Portd.3 = Output
Config Portd.4 = Output
Config Portd.5 = Output
Config Portb.0 = Input
Config Portb.1 = Input

Portb.0 = 1
Portb.1 = 1

Zold Alias Portd.5
Sarga Alias Portd.4
Piros Alias Portd.3

Do

If Pinb.0 = 0 Then
Waitms 50
If Pinb.0 = 0 Then
Gosub Led1
End If
If Pinb.1 = 0 Then
Waitms 50
If Pinb.1 = 0 Then
Gosub Led2
End If

Loop


Led1:
Do
Set Zold
Reset Sarga
Reset Piros
Wait 1
Reset Zold
Set Sarga
Reset Piros
Wait 1
Reset Zold
Reset Sarga
Set Piros
Wait 1
Reset Zold
Set Sarga
Set Piros
Wait 1
End If
Pinb.0 = 1
Loop
Return

Led2:
Do
Reset Zold
Reset Sarga

Set Piros
Wait 1
Reset Piros
Wait 1
End If
Pinb.1 = 1
Loop
Return
Új témaként nyitva (Admin)
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

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

Ugye a kapcsoló megnyomásra azonnal kell reagálni?
Ekkor ez az ún. INT lábon át mehet....
De ezt első lépésben nem javaslom.... (majd 1-3 hét múlva amikor meg lesz egy kicsit több gyakorlatod...


Én ahogy megoldanám:
Főprogramban a kapcsolót figyelem....
A LEDek állapotállítása időnként történik, adott időben...
Főprogramban számláló, es igy azonnal tudsz lepni. A prg 10 msec időszeletekre van osztva...

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

do
  a=a+1
  waitms 10
  if gomb=1 then Program= 1
  if gomb=2 then program= 2
  if program=1 then
      reset led3
      if a <100 then set led1 '1 sec eltelt a 0 helyzet ota...
      if a >999 then'1 sec es 1.5 sec kozt
         if a <1500 then
             set led2
             reset led1
         end if
      end if
  if program=2 then 
     reset led1
     reset led2
     set led3
  endif
  if a>3500 then a=0 'szamlalo nullazasa
loop

Persze lehet időzítővel (Timer), illetve megszakítással (INT). De ezt kezdőként nem javaslom, túl nagy lépcső....
Így ezzel a vizsgálattal 10 msec programlépés, nem kell párhuzamosítani a programot....
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

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

Hali djusee!

A (Do – Loop, és If – End If) utasítás párok használatával még nagyon nem vagy tisztában!
Szerintem ezeket olvasd még át párszor!
:wink:
Avatar
tetye
Chipgyilok
Hozzászólások: 279
Csatlakozott: 2007. augusztus 29. szerda, 6:00

d

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

hali a do-loop-oknál van baj elég, ha egy subba irod és a föprogram oda lép akkor az ott fog megr..hadni :) nem csody hogy nem megy. igy probáld ki és nézd meg mire gondoltam a do loop al kapcsolatban.

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

$regfile = "ATtiny2313.dat"
$crystal = 4000000

Config Portd.3 = Output
Config Portd.4 = Output
Config Portd.5 = Output
Config Pinb.0 = Input
Config Pinb.1 = Input
Portb.1 = 1                                                 'belső felhuzo
Portb.0 = 1                                                 'belső felhuzo

Declare Sub Led1
Declare Sub Led2

Zold Alias Portd.5
Sarga Alias Portd.4
Piros Alias Portd.3
'fö program ez van do-loop ban
Do

If Pinb.0 = 0 Then
Waitms 50
If Pinb.0 = 0 Then
Gosub Led1
End If
If Pinb.1 = 0 Then
Waitms 50
If Pinb.1 = 0 Then
Gosub Led2
End If

Loop
End

Led1:

Set Zold
Reset Sarga
Reset Piros
Wait 1
Reset Zold
Set Sarga
Reset Piros
Wait 1
Reset Zold
Reset Sarga
Set Piros
Wait 1
Reset Zold
Set Sarga
Set Piros
Wait 1
End If
Return

Led2:

Reset Zold
Reset Sarga
Set Piros
Wait 1
Reset Piros
Wait 1
End If
Return
Avatar
djusee
DrótVégénSzéndarab
Hozzászólások: 45
Csatlakozott: 2009. április 18. szombat, 6:00

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

Köszönöm szépen,késöbb ha hazaérek melóról akkor megpróbálom.Kezd egy kicsit derengeni,de eddig soha az életben nem programoztam és az angollal sem állok a legjobban.Örülök hogy van ez az oldal és még hogy segitetek is. Köszönöm. Lenne még egy kérdésem, adott egy .asm fájl, ez ugye C nyelven irt.Mivel tudnám átforditani és átlöni a tiny2313 -asomba, stk200 as pufferelt kábelom van.
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

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

Probáld ezzel: CodeVisionAVR
http://www.hpinfotech.ro/
:idea:
De ezt is tanulni kel! És nehezebb, mint a Bascom. :cry:
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

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

ASM -> Gépikód. Ez az AVRStudióval fordítható.
C -> WinAVR, CodeVision stb.

ASM processzor saját nyelve... C magasszintű nyelv, de a végeredmény fordítás után (akárcsak Bascom esetén) , ASM éállomány lesz (csak nem szövegesen, hanem binárisan (utasítás formában).
Avatar
djusee
DrótVégénSzéndarab
Hozzászólások: 45
Csatlakozott: 2009. április 18. szombat, 6:00

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

Hello.
Robert , igen, jo lenne ha azonnal reagálna.Probáltam beilleszteni amit irtál,nem sikerült a Bascom hibát jelez F7 lenyomása után az a=a+1 re. Amit Tetye irt az müködik csak bekapcsolás után ha PINB1 et kötöm nullára akkor nem indul be a pislogás, csak ha elözöleg elinditom a PINB0 al.
Megpróbálom valahogy leforditani.Köszönöm az infot
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

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

Vázlatot írtam csak, nem komplett programot! :)
Avatar
djusee
DrótVégénSzéndarab
Hozzászólások: 45
Csatlakozott: 2009. április 18. szombat, 6:00

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

Robert írta:Vázlatot írtam csak, nem komplett programot! :)
OK. Bocsánat. :oops:
Nagyon távoli még nekem ez :(
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

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

Írtam, hogy az If-eket is hozd rendbe! Nem olyan bonyolult csak próbálkozni kel.

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

$regfile = "ATtiny2313.dat"
$crystal = 4000000

Config Portd.3 = Output
Config Portd.4 = Output
Config Portd.5 = Output
Config Pinb.0 = Input
Config Pinb.1 = Input
Portb.1 = 1                                                 'belső felhuzo
Portb.0 = 1                                                 'belső felhuzo

Declare Sub Led1
Declare Sub Led2

Zold Alias Portd.5
Sarga Alias Portd.4
Piros Alias Portd.3
'fö program ez van do-loop ban
Do

If Pinb.0 = 0 Then
Gosub Led1
Waitms 50
End If

If Pinb.1 = 0 Then
Gosub Led2
Waitms 50
End If

Loop
End

Led1:
Set Zold
Reset Sarga
Reset Piros
Wait 1
Reset Zold
Set Sarga
Reset Piros
Wait 1
Reset Zold
Reset Sarga
Set Piros
Wait 1
Reset Zold
Set Sarga
Set Piros
Wait 1
'End If    Ez itt nem jó helyen van
Return

Led2:
Reset Zold
Reset Sarga
Set Piros
Wait 1
Reset Piros
Wait 1
'End If Ez itt nem jó helyen van
Return
:wink:
Használat előtt létre kel hozni a változókat.:

Dim a As Word
:lol:
Avatar
djusee
DrótVégénSzéndarab
Hozzászólások: 45
Csatlakozott: 2009. április 18. szombat, 6:00

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

kapu48 írta:Írtam, hogy az If-eket is hozd rendbe! Nem olyan bonyolult csak próbálkozni kel.

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

$regfile = "ATtiny2313.dat"
$crystal = 4000000

Config Portd.3 = Output
Config Portd.4 = Output
Config Portd.5 = Output
Config Pinb.0 = Input
Config Pinb.1 = Input
Portb.1 = 1                                                 'belső felhuzo
Portb.0 = 1                                                 'belső felhuzo

Declare Sub Led1
Declare Sub Led2

Zold Alias Portd.5
Sarga Alias Portd.4
Piros Alias Portd.3
'fö program ez van do-loop ban
Do

If Pinb.0 = 0 Then
Gosub Led1
Waitms 50
End If

If Pinb.1 = 0 Then
Gosub Led2
Waitms 50
End If

Loop
End

Led1:
Set Zold
Reset Sarga
Reset Piros
Wait 1
Reset Zold
Set Sarga
Reset Piros
Wait 1
Reset Zold
Reset Sarga
Set Piros
Wait 1
Reset Zold
Set Sarga
Set Piros
Wait 1
'End If    Ez itt nem jó helyen van
Return

Led2:
Reset Zold
Reset Sarga
Set Piros
Wait 1
Reset Piros
Wait 1
'End If Ez itt nem jó helyen van
Return
:wink:
Használat előtt létre kel hozni a változókat.:

Dim a As Word
:lol:
Köszi. Igy már müködik. Akkor megpróbálom azt is amit Robert irt.
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

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

Az ilyen hosszú listákat csak akkor idézd be, ha változtattál rajta valamit!
Értjük a nélkül is. És te érted, hogy miért működik már? Vagy mért nem működöt a tied?
8)
Avatar
djusee
DrótVégénSzéndarab
Hozzászólások: 45
Csatlakozott: 2009. április 18. szombat, 6:00

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

OK.Nem tudtam.Bocs. :oops:
Ha jol értem akkor a tiednél állandóan a Do Loop fut és figyeli hogy meg e van nyomva valamelyik gomb.Ha pinb.0 nyomom meg akkor kiugrik a Led1 re és ha végig ment rajta akkor Return vagyis visszaugrik a Do Loop ba és figyeli hogy változott e valami. Az enyémnél meg ha kiugrott a Led1 re akkor ott beragadt mivel oda is Do Loop ot irtam. :oops:
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

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

Ez volt az egyik hiba, amit Tetye javított ki. Na és a másik? :)
Válasz küldése