Fény rulet

Hogyan programozzak AVR chipet? Programozók beállításai...
Bascom nyelvű programok...
Válasz küldése
Avatar
Bence
Tranzisztorgyógyász
Hozzászólások: 166
Csatlakozott: 2007. október 30. kedd, 6:00

Fény rulet

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

Sziasztok!!!

Egy fény rulet-et készítek (van 15 LED sorba villognak amikor megnyomok egy gombot megáll a villogás, amikor egy másik gombot elindul). Írtam egy programot (8 LED-re a próbálgatáshoz):

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

$regfile = "2313def.dat"
$crystal = 4000000

Config Pind.2 = Input
Config Pind.3 = Input
Config Portb = Output
Config Int0 = Falling
Config Int1 = Falling
Config Timer1 = Timer , Prescale = 256


Dim Szamlalo As Word
Szamlalo = 0

On Int0 Indit
On Int1 Allj

Enable Timer1
Enable Interrupts
Enable Int0
Enable Int1

Start Timer1

Do
  Szamlalo = Timer1
  If Szamlalo > 0 Then
    Portb = 1
    Waitms 50
  End If

  Szamlalo = Timer1
  If Szamlalo > 8192 Then
    Portb = 2
    Waitms 50
  End If

  Szamlalo = Timer1
  If Szamlalo > 16385 Then
   Portb = 4
    Waitms 50
  End If

  Szamlalo = Timer1
  If Szamlalo > 24577 Then
   Portb = 8
    Waitms 50
  End If

  Szamlalo = Timer1
  If Szamlalo > 32769 Then
   Portb = 16
    Waitms 50
  End If

  Szamlalo = Timer1
  If Szamlalo > 40960 Then
    Portb = 32
    Waitms 50
  End If

  Szamlalo = Timer1
  If Szamlalo > 49152 Then
    Portb = 64
    Waitms 50
  End If

  Szamlalo = Timer1
  If Szamlalo > 57345 Then
    Portb = 128
    Waitms 50
  End If
Loop


Indit:
Start Timer1
Waitms 75
Gifr = 64
Return

Allj:
 Stop Timer1
 Waitms 75
 Gifr = 64
Return

End
A LED-ek nagyábbol csak össze vissza villognak és amikor megynyomom az állj gombot megáll egy pillanatra a villogás, aztán folytatódik. Mi a baj??? Segítsetek!
A hozzászólást 1 alkalommal szerkesztették, utoljára Bence 2007. december 16. vasárnap, 13:13-kor.
Bence
Avatar
herc1234
Bitfaragó
Hozzászólások: 459
Csatlakozott: 2007. február 9. péntek, 7:00

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

Mert a megszakító rutinoknak az end parancs !után kell állni.
Meg azt se feledd hogy megszakítás alatt nincs másik megszakítás
Avatar
Bence
Tranzisztorgyógyász
Hozzászólások: 166
Csatlakozott: 2007. október 30. kedd, 6:00

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

Hello! Módosítottam a programot! Most csak az a baj, hogy elkezd világítani az 1. LED aztán az 1. és a 2., aztán az 1., 2. és a 3. stb... Nekm úgy kéne, hogy (csak) az 1., aztán (csak) a 2., aztán (csak) a 3., stb... Miért nem így működik???

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

$regfile = "2313def.dat"
$crystal = 4000000

Config Pind.2 = Input
Config Pind.3 = Input
Config Portb = Output
Config Int0 = Falling
Config Int1 = Falling
Config Timer1 = Timer , Prescale = 256


Dim Szamlalo As Word
Szamlalo = 0

On Int0 Allj
On Int1 Indit

Enable Interrupts
Enable Int0
Enable Int1
Enable Timer1

Do
  Szamlalo = Timer1
  If Szamlalo > 0 Then
    Portb = 1
  End If

  Szamlalo = Timer1
  If Szamlalo > 8192 Then
    Portb = 2
  End If

  Szamlalo = Timer1
  If Szamlalo > 16385 Then
   Portb = 4
  End If

  Szamlalo = Timer1
  If Szamlalo > 24577 Then
   Portb = 8
  End If

  Szamlalo = Timer1
  If Szamlalo > 32769 Then
   Portb = 16
  End If

  Szamlalo = Timer1
  If Szamlalo > 40960 Then
    Portb = 32
  End If

  Szamlalo = Timer1
  If Szamlalo > 49152 Then
    Portb = 64
  End If

  Szamlalo = Timer1
  If Szamlalo > 57345 Then
    Portb = 128
  End If
Loop

End

Indit:
 Start Timer1
 Waitms 75
 Gifr = 64
Return

Allj:
 Stop Timer1
 Waitms 75
 Gifr = 64
Return
Bence
Hooligan01

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

Azért nem ugy müködött ahogy akartad, mert a feltételek amiket állitottál a timer1 értékével szemben: szamlalo > ertek mindig igazak voltak.

Igy probáld:

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

$regfile = "2313def.dat"
$crystal = 4000000

Config Pind.2 = Input
Config Pind.3 = Input
Config Portb = Output
Config Int0 = Falling
Config Int1 = Falling
Config Timer1 = Timer , Prescale = 256


Dim Szamlalo As Word
Szamlalo = 0

On Int0 Allj
On Int1 Indit

Enable Interrupts
Enable Int0
Enable Int1
Enable Timer1

Do
  Szamlalo = Timer1
  If Szamlalo = 0 Then
    Portb = 1
  End If

  Szamlalo = Timer1
  If Szamlalo = 8192 Then
    Portb = 2
  End If

  Szamlalo = Timer1
  If Szamlalo = 16385 Then
   Portb = 4
  End If

  Szamlalo = Timer1
  If Szamlalo = 24577 Then
   Portb = 8
  End If

  Szamlalo = Timer1
  If Szamlalo = 32769 Then
   Portb = 16
  End If

  Szamlalo = Timer1
  If Szamlalo = 40960 Then
    Portb = 32
  End If

  Szamlalo = Timer1
  If Szamlalo = 49152 Then
    Portb = 64
  End If

  Szamlalo = Timer1
  If Szamlalo = 57345 Then
    Portb = 128
  End If
Loop

End

Indit:
 Start Timer1
 Waitms 75
 Gifr = 64
Return

Allj:
 Stop Timer1
 Waitms 75
 Gifr = 64
Return
Avatar
Bence
Tranzisztorgyógyász
Hozzászólások: 166
Csatlakozott: 2007. október 30. kedd, 6:00

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

Köszi Hooligan01!

Amit te írtál az a baj vele, hogy a LED-ke nm villognak, de írtam egy másik programot és működik!!!

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

$regfile = "2313def.dat"
$crystal = 4000000

Config Pind.2 = Input
Config Pind.3 = Input
Config Portb = Output
Config Int0 = Falling
Config Int1 = Falling
Config Timer1 = Timer , Prescale = 256


Dim Szamlalo As Word
Szamlalo = 0

On Int0 Allj
On Int1 Indit

Enable Interrupts
Enable Int0
Enable Int1
Enable Timer1

Start Timer1

Do
  Szamlalo = Timer1
  If Szamlalo > 0 Then
    If Szamlalo < 8192 Then
      Portb = 1
    End If
  End If

  Szamlalo = Timer1
  If Szamlalo > 8192 Then
    If Szamlalo < 16385 Then
      Portb = 2
    End If
  End If

  Szamlalo = Timer1
  If Szamlalo > 16385 Then
    If Szamlalo < 24577 Then
     Portb = 4
    End If
  End If

  Szamlalo = Timer1
  If Szamlalo > 24577 Then
    If Szamlalo < 32769 Then
     Portb = 8
    End If
  End If

  Szamlalo = Timer1
  If Szamlalo > 32769 Then
    If Szamlalo < 40960 Then
     Portb = 16
    End If
  End If

  Szamlalo = Timer1
  If Szamlalo > 40960 Then
    If Szamlalo < 49152 Then
      Portb = 32
    End If
  End If

  Szamlalo = Timer1
  If Szamlalo > 49152 Then
    If Szamlalo < 57345 Then
      Portb = 64
    End If
  End If

  Szamlalo = Timer1
  If Szamlalo > 57345 Then
    If Szamlalo < 65535 Then
      Portb = 128
    End If
  End If
Loop

End

Indit:
 Start Timer1
 Waitms 75
 Gifr = 64
Return

Allj:
 Stop Timer1
 Waitms 75
 Gifr = 64
Return
Bence
Avatar
norbi
Chipgyilok
Hozzászólások: 308
Csatlakozott: 2006. augusztus 3. csütörtök, 6:00

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

Hello!

Csak egy tipp, hogy szebb legyen:

Ne igy használd, hogy:

If szamlalo> valami then
if szamlalo< valami2 then
........
end if
endif

hanem:

if szamlalo>valami and szamlalo<valami2 then

Talán még átláthatóbb is :wink:
Avatar
Bence
Tranzisztorgyógyász
Hozzászólások: 166
Csatlakozott: 2007. október 30. kedd, 6:00

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

Köszi Norbi!

Működik a program!!! Csak a prescale-t megváltoztattam 8-ra, hogy gyorsabban villogjanak a LED-ek.
Bence
Avatar
herc1234
Bitfaragó
Hozzászólások: 459
Csatlakozott: 2007. február 9. péntek, 7:00

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

én viszont ebben nem értem minek a timer
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

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

Mi a timer benne?

Én valami egyszerűsítést csinálnék. If-Then helyett select-case szerkezettel.

select a
case 12000 to 14000
case 14001 to 19000
case else
end select

Sokkal gyorsabban végigmegy, és flashfelyben is töredéke.
Válasz küldése