Arduino & I2CLCD & LCD_button 5

Hogyha sikeresen O/PLED illetve hagyományos alfanumerikus - esetleg tán grafikus kijelzővel gyűlik meg a baja valakinek:)
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

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

Akkor már tervezd rá az INT lábak bekötését is!

Valakinek van tapasztalata, hogy milyen kábel kel és menyi a max. hossz? Az I2C átvitelnél.
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

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

Rajta van alapban....

I2C @50 kHz esetn 10 méter, 1k5 lezáróellenállásokkal.
Kábelből sima 10 eres szalagkábel...
Avatar
aaszabo
Tranzisztorgyógyász
Hozzászólások: 179
Csatlakozott: 2012. január 22. vasárnap, 7:00

I2CLCD-E2 LCD-vezérlő + 5 gombos billentyűzet - használata

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

Sziasztok!

Remélem téved ide valaki, tekintve, hogy 2010-es a téma.

Egy AVR-Aurdino/uno alaplapon, WizNetShield és ahhoz I2C buszon csatlakozó (a fenti címben) E2 az LCD-vel és az 5 gombos panellel alkotja az összeállítást.
A gombok kezelésénél elakadtam. Az LCD-t tudom a sajat lib-vel I2C-n keresztűl kezelni. Viszont az 5 gombos panelhez nem találtam minta programot, vagy leírást.
Tudna valaki segíteni?

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

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

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

'********************************************************************
'* Program nev: Duino-Mini-i2c_lcd.bas                              *
'* Board      : AVR-Duino MiniBoard v1                              *
'* Fordito    : BASCOM AVR, (V.1.11.9.8)                            *
'* Datum      : 2011-07-12                                          *
'* Honlap     : http://avr.tavir.hu                                 *
'*                                                                  *
'* Irta       : Cseh Róbert                                         *
'********************************************************************


'--- Alapadatok ---
$crystal = 16000000                                         'Sebesseg
$regfile = "M168def.dat"                                    'Chip

$baud = 9600
$swstack = 64
$hwstack = 64
$framesize = 64


Dim Temp1b As Byte
Dim Temp2b As Byte
Dim Temp3b As Byte

Speaker Alias Portb.2
Config Speaker = Output                                     'Hangszoro
Reset Speaker



'configure the used port pin for I2C
Config I2cdelay = 5                                         ' default slow mode:5
Config Sda = Portc.4
Config Scl = Portc.5
Waitms 50
I2cinit

'I2C_LCD
   $lib "#lcd_i2c-bl_mcpduo.lib"                            'MCP23017(40)+MCP23008(4E)
   Const _i2c_lcd_address_w40 = &B01000000                  'MCP23017
   Const _i2c_lcd_address_w4e = &B01001110                  'MCP23008
   Const _i2c_lcd_bl = 0                                    'Backlight yes/no
   Config Lcd = 16 * 2
   Const Iocon = &B00001100
   Const Iodirki = 0
   Const Iodirbe = 255
   Dim I2c_lcd_b As Byte
   Const Bit_rs = 4
   Const Bit_e = 7
   Const Bit_bl = 6
   Const I2c_lcd_bl = 0                                     'hattervilagitas

Gosub Csipog1




Initlcd
Cls
Initlcd
Cls

   Lcd "TavIR"
   Waitms 500
   For Temp1b = 1 To 40
      Shiftlcd Left
      Waitms 100
   Next Temp1


       Wait 1
      'I2C_lcd_gomb
      'Inputhex "MCP23017 - LCD address (hex):" , Temp1b
      Do
      I2cinit
      Initlcd
      'Temp1b = &B01000000



      'I2C_lcd_gomb
      Ujra:
      I2cstart
      I2cwbyte _i2c_lcd_address_w40
      I2cwbyte &H12
      I2cstop
      I2cstart
      Temp1b = _i2c_lcd_address_w40 + 1
      I2cwbyte Temp1b
      I2crbyte Temp2b , Nack
      I2cstop
      Waitms 10                                             'prell kivedese
      I2cstart
      I2cwbyte _i2c_lcd_address_w40
      I2cwbyte &H12
      I2cstop
      I2cstart
      I2cwbyte Temp1b
      I2crbyte Temp3b , Nack
      I2cstop

      If Temp3b <> Temp2b Then
         Temp3b = 0
         Else
         If Temp3b <> 0 Then Gosub Csipog1
      End If
      If Temp3b = 0 Then Goto Ujra
      Cls
      Lcd "Gomb:" ; Bin(temp3b)


      Print "Gomb : " ; Bin(temp3b) ; " : ";
      If Temp3b = &B00001000 Then Print "1"
      If Temp3b = &B00100000 Then Print "2"
      If Temp3b = &B00000001 Then Print "3"
      If Temp3b = &B00000010 Then Print "4"
      If Temp3b = &B10000000 Then Print "5"
      If Temp3b = &B11000000 Then Print "5M"



      Loop

      
End                                                         'end program

   Csipog2:
      Sound Speaker , 100 , 700                             'make some noice
      Sound Speaker , 100 , 900                             'make some noice
   Csipog1:
      Sound Speaker , 100 , 700                             'make some noice
   Return

valahol fenn van még....
most itt is:)
A hozzászólást 1 alkalommal szerkesztették, utoljára Robert 2012. február 4. szombat, 6:47-kor.
Avatar
aaszabo
Tranzisztorgyógyász
Hozzászólások: 179
Csatlakozott: 2012. január 22. vasárnap, 7:00

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

Szia Róbert!


Köszönöm. Kipróbáltam amit küldtél és működik. Sőt közben megtaláltam a tőled vásárolt CD-n az avr-duino-all2.bas-ban is a Prog33: címkénél.

Viszont ez azt csinálja, hogy egy hurokban folyamatosan lekérdez. Azt hogyan tudom megoldani, hogy megszakításként egy szubrutin induljon, ha egy gomb lenyomódik és ott kapjam meg valahogy a gomb kódját?

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

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

A chipen úgy állítod be a regisztereket, hogy int-et generáljon.
Ez az AVR-en az int1-re van kötve.

Innen gyerekjáték és 1-2 nap megírni a programot :).
Nálam ez az 1-2 nap hiányzik... [/list]
Avatar
aaszabo
Tranzisztorgyógyász
Hozzászólások: 179
Csatlakozott: 2012. január 22. vasárnap, 7:00

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

Ezzel próbáltam vezérlő panelen lévő MCP23017-en beállítani, hogy megszakítást generáljon. Ha jól láttam az i2c_lcd-hez készíett LIB-edből, akkor a gomb a B porton van, igaz?
Viszont nem generál megszakítást.
Ezt a rutint az általad i2c LCD kezeléshez adott lib inicializálása után hívom.
A Kbd_w értéke ezzel azonos :
Const _i2c_lcd_address_w40 = &B01000000 'MCP23017

Akár 1, akár 0-t írok INTCONB-be, akkor sem megy.

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

'------------------------------------------------------------------------------
' 5 gombos panel INT alapú kezelésének inicializálása
'------------------------------------------------------------------------------
Sub I2c_kbd_init

'A GPIOB alapértelmezett értéke, ehhez fogja hasonlítani a változást
   I2cstart
   I2cwbyte Kbd_w
   I2cwbyte &H07                                            'DEFVALB
   I2cwbyte 255
   I2cstop

'GPIOB megszakításvezérlésének beállítása
'0->A láb előző állapotával hasonlítja össze
'1->A DEFVALB regiszterben megadott értékkel hasonlítja össze
   I2cstart
   I2cwbyte Kbd_w
   I2cwbyte &H09                                            'INTCONB
   I2cwbyte 0
   I2cstop

'Engedélyezzük a nyomógomboknak a megszakítást
   I2cstart
   I2cwbyte Kbd_w
   I2cwbyte &H05                                            'GPINTENB
   I2cwbyte 255
   I2cstop

End Sub
Avatar
ratkaics
Újonc
Újonc
Hozzászólások: 13
Csatlakozott: 2010. augusztus 4. szerda, 6:00

Háttérvilágítás

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

Sziasztok!

A háttérvilágítását az LCD-nek a programban, menet közben szeretném ki-be kapcsolni. Van erre valakinek valamilyen ötlete? (a lib-nek ugye konstansként kell megadni)
Avatar
ratkaics
Újonc
Újonc
Hozzászólások: 13
Csatlakozott: 2010. augusztus 4. szerda, 6:00

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

Sikerült ebben a témában eredményre jutnia valakinek?
aaszabo írta:Ezzel próbáltam vezérlő panelen lévő MCP23017-en beállítani, hogy megszakítást generáljon........

Nekem még olyan bajom is van, hogy ha rákötöm az 5 gombos kis panelt az LCD vezérlő panelra, akkor a B port bemenetei bizonytalanok. Időnként egyik másik be-be billen. Ezt még ki lehet védeni ugye a fentebb is írt kóddal, de szerintem a megszakításnál is gondot jelentene.
Találkozott valaki ilyen problémával?
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

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

Hosszú kábel, és/vagy a belső felhúzóellenállást nem kapcsoltad be.
Avatar
ratkaics
Újonc
Újonc
Hozzászólások: 13
Csatlakozott: 2010. augusztus 4. szerda, 6:00

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

Valóban, az inicializáló részből kifelejtettem a felhúzó ellenállások bekapcsolását. Köszönöm szépen a segítséget.

Esetleg a háttérvilágítás szoftverből való kapcsolgatására van valami ötlet?
Robert írta:Hosszú kábel, és/vagy a belső felhúzóellenállást nem kapcsoltad be.
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

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

Bascom-AVR alatt úgy oldottam meg, hogy a kiíráskor azt a bitet ami a hátteret kapcsolja fix 1-é vagy vagy fix 0-vá varázsoltam...
Avatar
ratkaics
Újonc
Újonc
Hozzászólások: 13
Csatlakozott: 2010. augusztus 4. szerda, 6:00

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

Ezt esetleg le tudnád írni részletesebben? :roll:
Robert írta:Bascom-AVR alatt úgy oldottam meg, hogy a kiíráskor azt a bitet ami a hátteret kapcsolja fix 1-é vagy vagy fix 0-vá varázsoltam...
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

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

Bascom-AVR alatt:

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

const hatter= '0 v. 1
.

'kiirorutinban
'kiirando adat _temp1
temp1.hatterbit = hatter
' kiirorutin a 2 félszammal (nibble)
Este felrakom (ill talán fenn is van) a file cserebere alatt. I2C LCD néven.
Avatar
ratkaics
Újonc
Újonc
Hozzászólások: 13
Csatlakozott: 2010. augusztus 4. szerda, 6:00

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

Nagyon köszi előre is!



Robert írta:Bascom-AVR alatt:

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

const hatter= '0 v. 1
.

'kiirorutinban
'kiirando adat _temp1
temp1.hatterbit = hatter
' kiirorutin a 2 félszammal (nibble)
Este felrakom (ill talán fenn is van) a file cserebere alatt. I2C LCD néven.
Válasz küldése