AVRWEB32

Hogyan programozzak AVR chipet? Programozók beállításai...
Bascom nyelvű programok...
Válasz küldése
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

AVRWEB32

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

Előzmény:

Gova:
Elküldve: 2008. Április 1. Kedd, 15:52 Hozzászólás témája: Kimenet
--------------------------------------------------------------------------------

Szia.
Nem tudtam pontosan melyik fórumon is tehetem volna fel a kérdésemet, azért irok ide. Az AVRWEB 32 készletett hasznélom a programom fejlesztésekor. Mostanra jutottam el oda, hogy a relés kimeneteket kellene használnom egy mágnesszelep nyitására és zárására. A kérdésem az lenne, hogy pontosan hogyan lehet használni ezeket a kimeneteket? Mert nem igazán értem azt ami a shéma rajzon van. Mit hova kell pontosan kötni? A segitségedet elöre is köszönöm.



Relék kapcsoló kimenettel vannak.
Az OUT lábakon egy darlingtontranzisztor van és azzal kapcsolod a relét. Aktív állapotban húz meg.
PC2....PC5 lábakon.

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

dim i as byte
 Out1 Alias Portc.2
   Out2 Alias Portc.3
   Out3 Alias Portc.4
   Out4 Alias Portc.5
   Config Out1 = Output
   Config Out2 = Output
   Config Out3 = Output
   Config Out4 = Output
   Out1 = 0
   Out2 = 0
   Out3 = 0
   Out4 = 0
      Print "Direkt kimenet:" ; Out1 ; Out2 ; Out3 ; Out4
      Input "OUT1 (1/0):" , I
      Out1 = I
      Input "OUT2 (1/0):" , I
      Out2 = I
      Input "OUT3 (1/0):" , I
      Out3 = I
      Input "OUT4 (1/0):" , I
      Out4 = I
      Wait 5
      I = Pind
      I = I And &B00111100
      Print : Print "Out (xxOOOOxx): " ; Bin(i)
end
Avatar
Gova
DrótVégénSzéndarab
Hozzászólások: 26
Csatlakozott: 2008. február 14. csütörtök, 7:00

Direkt kimenet

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

Szia.

A következő lenne a kédésem, lentebb bemásoltam a program kódot, amivel egyenlőre tesztelem a direkt kimenteket. Azt szeretném elérni, hogy ha a beérkező karakter 3, akkor "bekapcsoljon" a relé, ha 5 akkor pedig "kikapcsoljon". És csak egy relé kapcsoljon be. Ahogyan most van a program igy elvileg mindegyiket lehetne kapcsolno, de csak az egyik kapcsolbe, de az is valami miat lassan, és csak ugy ha küldök mégvalamit a 3-o kivül. Kikapcsolni, pedig nem igazán tudom. Szerinted mi lehet a probláma? Ha van valami ötleted azt szivesen venném. Elöre is kösz.


Kód:
$regfile = "M32def.dat"
$crystal = 14745600
$baud = 9600
$hwstack = 64
$swstack = 64
$framesize = 64
Declare Sub Bekapcs
Declare Sub Kikapcs

Out1 Alias Portc.2
Out2 Alias Portc.3
Out3 Alias Portc.4
Out4 Alias Portc.5
Config Out1 = Output
Config Out2 = Output
Config Out3 = Output
Config Out4 = Output
Out1 = 0
Out2 = 0
Out3 = 0
Out4 = 0

'------------- LCD inicializálás ------------

'I2c
Config I2cdelay = 10 'default slow mode:10
Config Sda = Portc.1 'I2C SDA
Config Scl = Portc.0 'I2C SCL

'I2C_LCD
$lib "#lcd_i2c-bl.lbx"
Const _i2c_lcd_address_w = &H4E
Const _lcd_bl = 1

Config Lcd = 20 * 4

Initlcd
Cls
Initlcd
Cls

'-------------- Config Input ----------------

Config Portd = Input
Portd = 255

On Urxc Getchar

Dim Inchar As String * 1
Dim I As Byte
Dim J As Byte

Enable Interrupts
Enable Urxc
Locate 1 , 5
Lcd "Program Start"

Getchar:
Inchar = Inkey()
Select Case Inchar
Case "3" : Gosub Bekapcs
Case "5" : Gosub Kikapcs
End Select
Return

Sub Bekapcs
Locate 2 , 1
Lcd "Direkt kimenet:" ; Out1 ; Out2 ; Out3 ; Out4
Input "OUT1 (1/0):" , I
Out1 = I
Input "OUT2 (1/0):" , I
Out2 = I
Input "OUT3 (1/0):" , I
Out3 = I
Input "OUT4 (1/0):" , I
Out4 = I
Waitms 5
I = Pind
I = I And &B00111100
Locate 3 , 1
Lcd "Out (xxOOOOxx): " ; Bin(i)
End Sub

Sub Kikapcs
Locate 2 , 1
Lcd "Direkt kimenet:" ; Out1 ; Out2 ; Out3 ; Out4
Input "OUT1 (1/0):" , J
Out1 = J
Input "OUT2 (1/0):" , J
Out2 = J
Input "OUT3 (1/0):" , J
Out3 = J
Input "OUT4 (1/0):" , J
Out4 = J
Waitms 5
J = Pind
J = J And &B00111100
Locate 3 , 1
Lcd "Out (xxOOOOxx): " ; Bin(j)
End Sub

End
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

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

Miért megszakításalapon használod sorosportot?

Az INT és a főprogram egymásra fut!
LCD"Prg start" után mit keres egy szubrutin?????


Ha mindenképp int van a soroson, akkor:

LCD "Start"
Do
Nop'ures utasitas
loop
end

kell.
Avatar
Gova
DrótVégénSzéndarab
Hozzászólások: 26
Csatlakozott: 2008. február 14. csütörtök, 7:00

-

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

Szia.

Olvastam a megszikitásokat tartalmazó fejezetett, abban bene volt, hogy megszakitásban nem lehet megszakitás. Az lenne a kérdésem hogyan kilehet-e lépni egy olyan do-loop ciklusból, ami egy megszakitáson belül van, olyan módon, hogy küldök egy karaktert és ha a megfelelő érkezik akkor lépjen ki a ciklusbó?. Ez lehetséges vagy ilyenre nincs lehetőség, csak valamilyen más módon tudok kilépni a ciklusból. Válaszod elöre is köszönöm. Szia.
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

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

Minta:

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

dim a as byte
Do
incr a
if a=10 then exitdo
loop
Print a
Avatar
Gova
DrótVégénSzéndarab
Hozzászólások: 26
Csatlakozott: 2008. február 14. csütörtök, 7:00

-

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

Szia.

Ez lenne az a ciklus amirül már egyszer kérdeztelek, hogy hogyan tudok belöle kilépni. Ezt a szubrutint egy megszakitással hivom meg. Azt szeretném elérni, hogy bármikor kitudjak lépni, ha mért érték nekem megfelel. Ezt hogyan lehet megoldani. A legjobb az lenne, ha egy soros porton érkező karakterre állna le, de mivel megszakitásként hivom meg a szubrutint ez nem igazán megoldható. Ha van valami ötleted szivesen veném. Elöre is kösz.

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

Sub Calb
  Do
      If Pind.7 = 1 Then
      Waitms 100
      If Pind.7 = 0 Then
         Incr A
         Print "@" ; A ; "#";
         Locate 2 , 1
         Lcd "Beer Pump 1:  " ; A
      End If
      Else
      If Pind.7 = 1 Then
      Incr A
      Print "@" ; A ; "#";
      Locate 2 , 1
      Lcd "Beer Pump1: " ; A
      End If
      End If
  Loop 
Return
End Sub
Hooligan01

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

Do, Loop, Until

pl.:

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

Dim A as byte

Do
 Incr A
...
....
Loop Until A = x

Ilyesmire gondoltál?
Hooligan01

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

Egyébként a Sub-on belül mit keres az Enter???
Ha interrupt címke, akkor nem sub, csak simán címke!
Avatar
Gova
DrótVégénSzéndarab
Hozzászólások: 26
Csatlakozott: 2008. február 14. csütörtök, 7:00

-

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

Szia.

Pontosan az lenne a kérdésem, hogyan tudok úgy kilépni, hogy nem egy értéket adok meg neki, ha azt elérte akkor lépjen ki, hanem akkor lépjen ki amikor küldök neki soros porton egy jelet, csak annyi a gond, hogy a megszakitásban nem lehet emgszakitás valami más módszer van, hogy kitudjak lépni a ciklusbül, most jellenleg egy nyomógomb szolgál elre, de ezzel egy bemenet elveszlik.
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

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

Do-Loopból kilépés:
Exit Do

For-Next:
Exit For


While-Wend
EXIT WHILE

Sub:
EXIT SUB

Function:
EXIT FUNCTION


Szabadon válogathatsz:)
Szubrutinból kilépni (pl. INThívásból):
Exit Sub utasítással....
Válasz küldése