Karakteres LCD kezelése

Hogyha sikeresen O/PLED illetve hagyományos alfanumerikus - esetleg tán grafikus kijelzővel gyűlik meg a baja valakinek:)
Avatar
evildodo
Pákabűvész
Hozzászólások: 213
Csatlakozott: 2009. február 4. szerda, 7:00

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

winnerbt írta:Lehet, hogy maradi vagyok, de én az ilyen scrollozós dolgokat úgy csinálom, hogy vagy tömbbe vagy stringbe bepakolom az egészet és onnan másolom ki a megfelelő pointerrel a kijelzőre. Csinálsz egy nagy tömböt és egy ciklussal "kezdet"-től 16db-ot kimásolsz vagy egy másik stringbe vagy egyből a kijelzőre és a "kezdet" pointert módosítgatod.
Vagy MID()-el kiszedegeted.
JAni
Na ezt most csak "körülbelül"-re értem :) Nem teljesen világos. Csinálsz egy string-et, és felröltöd a tömb értékeivel?
Ezen még gondolkodnom kell, mert ez nem teljesen világos :)
Esetleg, ha egy példaprogirész dobnál, akkor nagyon hálás lennék :)
Geht nicht, Gibt's nicht!
Avatar
evildodo
Pákabűvész
Hozzászólások: 213
Csatlakozott: 2009. február 4. szerda, 7:00

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

evildodo írta:
winnerbt írta:Lehet, hogy maradi vagyok, de én az ilyen scrollozós dolgokat úgy csinálom, hogy vagy tömbbe vagy stringbe bepakolom az egészet és onnan másolom ki a megfelelő pointerrel a kijelzőre. Csinálsz egy nagy tömböt és egy ciklussal "kezdet"-től 16db-ot kimásolsz vagy egy másik stringbe vagy egyből a kijelzőre és a "kezdet" pointert módosítgatod.
Vagy MID()-el kiszedegeted.
JAni
Na ezt most csak "körülbelül"-re értem :). Csinálsz egy string-et, és felröltöd a tömb értékeivel?
Ezen még gondolkodnom kell, mert ez nem teljesen világos :)
Esetleg, ha egy példaprogirész dobnál, akkor nagyon hálás lennék :)
Geht nicht, Gibt's nicht!
Avatar
winnerbt
Elektronbűvölő
Hozzászólások: 907
Csatlakozott: 2007. március 25. vasárnap, 6:00

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

Most nincs itt semmi vackon karakteres LCD-m, de pl.:
Csinálsz egy tömböt, tömb(397)

kezdet=17
for pointer=kezdet to kezdet+16 (mondjuk, 16 karakteres az LCD)
lcd tömb(pointer)
next

A tömb tipusátol függ, hogy kell-e CHR(tömb(pointer)) konverzió.

A kezdetet növeled, akkor balra rotálódik a szöveged.
Végül is egy hosszú láncból kiszedsz mindig 16-ot, csak a kezdőpontját tologatod, ha kell.
Csak akkor, ha van valami számítási eredményed, akkor ebbe a tömbbe kell azt beletenned!

JAni
Avatar
kormen
DrótVégénSzéndarab
Hozzászólások: 16
Csatlakozott: 2009. február 11. szerda, 7:00

I2C - LCD

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

Sziasztok!

Olvasgatom a HD44780 adatlapját, de valamit félreértek. Programoznám az LCD-t avr-ből, de i2c portbővítőn keresztül. (mcp23016) Valahol a 26. topicoldalon volt hogy ezt valaki valahogy megoldotta hogy az lcd libet i2csítette (vagymi :)) de sajnos a letöltések nem üzemelnek (egy ideje) és én meg nem jövök rá hol rontom el. Mondjuk én a kályhás verziót használom:

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

$regfile = "m8def.dat"
$crystal = 8000000
'$sim
$hwstack = 64
$swstack = 32
$framesize = 40

Config Sda = Portc.4
Config Scl = Portc.5
I2cinit

Motor Alias Portb.0
Config Motor = Output
Gomb Alias Pind.3
Config Gomb = Input
Enable Interrupts
Enable Int1
On Int1 Button

Dim Startline As Bit , Startchr As Byte , Send As String * 16       'startline sor, startchr karakter pozició, send szöveg
Dim Gowr As Bit
Dim Lsb As Byte , Msb As Byte , 4bl As Byte , 4bh As Byte
Dim Char As Byte
Dim Lin As Byte , Chpos As Byte
Dim Trans As Byte                                           'Átvivendő adat

'################# Constansok ######################

Const Waddress = &H40
Const Raddress = &H41
Const Chrwr = &B00110000

Declare Sub Wbutt()
Declare Sub I2c_write(byval Cmd As Byte , Byval Lsb As Byte , Byval Msb As Byte)
Declare Sub I2c_read
Declare Sub Create_char(byval Char As Byte)
Declare Sub I2c_lcd(byval Lin As Byte , Byval Chpos As Byte , Byval Char As Byte)
Declare Sub Stwr()
Declare Sub Endwr()

'########################## Program ###############################
Waitms 250                                                  'Bekapcs várakozás
Call I2c_write(&H02 , &HFF , &HFF)
Call I2c_write(&H06 , &H00 , &HFF)                          'inicializálás


Startline = 0
Startchr = 0
Send = "bla"

' LCD Pins
' 7   6  5  4  3  2  1  0
' N   N  RS E  D4 D5 D6 D7

'Call I2c_write(&H02 , &B00000000 , 0)                       '4 bites lcd üzemmód
Call I2c_write(&H02 , &B00000100 , 0)                       '4 bites lcd üzemmód

Call I2c_write(&H02 , &B00000000 , 0)                       'display on
Call I2c_write(&H02 , &B00000111 , 0)                       'display on

Call I2c_write(&H02 , &B00000000 , 0)                       'shift cursor
Call I2c_write(&H02 , &B00000000 , 0)                       'shift cursor


'Call I2c_write(&H02 , &B00000110 , 0)                       'display bekapcsolása
'Goto Wbutt

Main:
' nop
   'Call I2c_lcd(0 , 0 , 0)
   Waitms 500
   If Startchr = 255 Then
      Startchr = 0
   End If
      Startchr = Startchr + 1
'      Call Create_char(startchr)
      Call I2c_lcd(0 , 0 , Startchr)
      'Gowr = 0
Goto Main

Button:
   Gowr = 1
Return

Sub Wbutt()
Gowr = 0
Do
'nop
Loop Until Gowr = 1
Gowr = 0
End Sub

Sub I2c_write(byval Cmd As Byte , Byval Lsb As Byte , Byval Data2 As Byte)
' Writes data to the I2C
 Toggle Motor
 I2cstart                                                   'Generate A Start Condition
 I2cwbyte Waddress                                          'Transmit The "ADDRESS and WRITE" Byte
 I2cwbyte Cmd                                               'Transmit The Command Byte
 I2cwbyte Lsb                                               'Transmit First Data Byte
 I2cwbyte Msb                                               'Transmit Second Data Byte
 I2cstop                                                    'Generate a STOP condition
 Waitus 50                                                  'Some delay may be necessary for back to back transmitions

End Sub

Sub I2c_read
' Read data from the I2C

 I2cstart                                                   'Generate START condition
 I2cwbyte Waddress                                          'Transmit The "ADDRESS and WRITE" Byte
 I2cwbyte &H00                                              'Transmit The Command Byte
 I2cstop                                                    'Generate a STOP condition
 I2cstart                                                   'Generate a START condition
 I2cwbyte Raddress                                          'Transmit ADDRESS with READ command
 I2crbyte Lsb , Ack                                         'Receive first DATA byte (LSB) and acknowledge
 I2crbyte Msb , Nack                                        'Receive second DATA byte (MSB) and don't acknowledge
 I2cstop                                                    'Generate a STOP condition

End Sub

Sub Create_char(byval Char As Byte)
   4bh = Char
   4bl = Char
   Shift 4bh , Right , 4
   Shift 4bl , Left , 4
   Shift 4bl , Right , 4
   4bh = Chrwr Xor 4bh
   4bl = Chrwr Xor 4bl

End Sub

Sub I2c_lcd(byval Lin As Byte , Byval Chpos As Byte , Byval Char As Byte)
' LCD Pins
' 7   6  5  4  3  2  1  0
' N   N  RS E  D4 D5 D6 D7


   Call Create_char(char)
   Call Stwr

   Trans = &B00110000                                       'RS magasan az iráshoz
   Trans = Trans Or 4bl                                     'befüzzük az alsó biteket
   Call I2c_write(&H02 , Trans , 0)
   Trans = Trans And 11110000                               'az alsó biteket töröljük
   Trans = Trans Or 4bh                                     'befüzzük az felső biteket
   Call I2c_write(&H02 , Trans , 0)

   Call Endwr

End Sub

Sub Stwr()
   Trans = &B00100000                                       'RS magasan az iráshoz
   Call I2c_write(&H02 , Trans , 0)
   Trans = &B00110000                                       'RS magasan az iráshoz E odaadva, adat jön.
   Call I2c_write(&H02 , Trans , 0)
End Sub


Sub Endwr()
   Trans = &B00100000                                       'RS magasan az iráshoz E elvéve, adat vége
   Call I2c_write(&H02 , Trans , 0)
End Sub
Ez egy próbaprogram. Se nem szép se nem jó. De ha jól értelmeztem a leírást ennek működnie kellene. Mégsem teszi.

A programnak elvileg az összes karaktert egymás után ki kell írnia az lcd-re. R/W fixen földön így az azért nem szerepel a programban.
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

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

Mit csinál?

Az utasítások után a várakozások nincsenek meg, hogy az LCD a kapott parancsot végrehajthassa!

A portbővítő lábain megjelenik a kiküldött adat?

Nálam csam MCP23017-esre van meg a kód....
U.i.: letöltések mennek....
Avatar
kormen
DrótVégénSzéndarab
Hozzászólások: 16
Csatlakozott: 2009. február 11. szerda, 7:00

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

Robert írta:Mit csinál?
Semmit.
Az utasítások után a várakozások nincsenek meg, hogy az LCD a kapott parancsot végrehajthassa!
Ez rendben van az későbbi projekt, de logikailag mivel folyamatosan küldöm az adatokat, nem kellene minden 5-10-15. et feldolgoznia? ha gyorsan megy akkor addig ugy sem figyel a busy bitet később írtam volna bele.
A portbővítő lábain megjelenik a kiküldött adat?

Nálam csam MCP23017-esre van meg a kód....
U.i.: letöltések mennek....
megjelenik. az az elvileg jó. Valóban most már mennek a letöltik, megnézem magamnak azokat a cuccokat.

Libek irásához segédanyag merre? :)
Avatar
kormen
DrótVégénSzéndarab
Hozzászólások: 16
Csatlakozott: 2009. február 11. szerda, 7:00

i2c lib

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

Hi!

Kipróbáltam az i2c libbel. Itt is megjelennek a lábakon a jelek, de a kijelzőn semmi.

íme az alkotás:


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

$regfile = "m8def.dat"
$crystal = 8000000
'$sim
$hwstack = 64
$swstack = 32
$framesize = 40
'$baud = 9600


Config I2cdelay = 10
Config Sda = Portc.4
Config Scl = Portc.5

Config Pind.3 = Input

Enable Interrupts
Enable Int1
On Int1 Button

Dim Gowr As Bit
Dim Startchr As Byte
Dim Cmd As Byte , Lsb As Byte , Msb As Byte
$lib "#lcd_i2c-bl.lbx"
Const _i2c_lcd_address_w = &H40
Const _lcd_bl = 1                                           'Backlight yes/no

Config Lcd = 16 * 2


Declare Sub Wbutt()
Declare Sub I2c_write(byval Cmd As Byte , Byval Lsb As Byte , Byval Msb As Byte)

'######################  MCP init #####################################
Waitms 250                                                  'Bekapcs várakozás
Call I2c_write(&H06 , &H00 , &HFF)                          'Ki bemeneti irányok meghatározása gp0 ki gp1 be
Call I2c_write(&H02 , &H00 , &H00)                          'Logikai szintek beállítása mind magasba
'Call I2c_write(&H04 , &H00 , &H00)                          'invertálás beállitása 0 nem invertál
'Call I2c_write(&H06 , &H00 , &H00)                          'inicializálás


'##################### LCD Kezelés ####################################
Call Wbutt
Initlcd
Call Wbutt
Cls
Call Wbutt
Lcd "Szöveg...."

Call Wbutt

Main:
' nop
   Waitms 500
   If Startchr = 255 Then
      Startchr = 0
   End If
   Startchr = Startchr + 1
'  Call Create_char(startchr)
   Locate 1 , 1
   Lcd Startchr
Goto Main

Button:
   Gowr = 1
Return

Sub Wbutt()
   Gowr = 0
   Do
      'nop
   Loop Until Gowr = 1
   Gowr = 0
End Sub

End

Sub I2c_write(byval Cmd As Byte , Byval Lsb As Byte , Byval Data2 As Byte)
' Writes data to the I2C
 I2cstart                                                   'Generate A Start Condition
 I2cwbyte _i2c_lcd_address_w                                'Transmit The "ADDRESS and WRITE" Byte
 I2cwbyte Cmd                                               'Transmit The Command Byte
 I2cwbyte Lsb                                               'Transmit First Data Byte
 I2cwbyte Msb                                               'Transmit Second Data Byte
 I2cstop                                                    'Generate a STOP condition
 Waitus 50                                                  'Some delay may be necessary for back to back transmitions

End Sub
Proteusban szimulálom mivel az lcd-m még nincs meg. és a lábakon a jeleket látom. Mégsem Jön semmi a kijelzőre.

ez ugyan nem 23008 hanem 23016 de elvileg ennek csak több a lába.
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

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

Kezdésnek az LCD Config-et nem találom a programodban!
A példában ez van (I2c_lcd.zip):
'Configure I2C LCD (PCF8574) Illetve alap MCP23008 ugyanezen a címen (A0,A1,A2:GND)
Const Bit_rs = 4
Const Bit_e = 7
Const Bit_bl = 6 'hattervilagitas

Szerintem ezek kellenek a *.lib-nek.
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

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

23008 és a 23016 kezelése kicsit (nagyon) eltér....

Szimulátort tessék elfelejteni!
Valódi környezetben kell tesztelni.....
Avatar
kormen
DrótVégénSzéndarab
Hozzászólások: 16
Csatlakozott: 2009. február 11. szerda, 7:00

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

kapu48 írta:Kezdésnek az LCD Config-et nem találom a programodban!
A példában ez van (I2c_lcd.zip):
'Configure I2C LCD (PCF8574) Illetve alap MCP23008 ugyanezen a címen (A0,A1,A2:GND)
Const Bit_rs = 4
Const Bit_e = 7
Const Bit_bl = 6 'hattervilagitas

Szerintem ezek kellenek a *.lib-nek.
Két bas fájl van a zipben, az első az magában a basban valósítja meg a hívásokat, nem libekkel. Abban benne van ez amit mondasz. a másikban ami a libet használja abban csak két konfigurációs sor van:

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

$lib "#lcd_i2c-bl.lbx"                                      'My compiled i2c driver for the LCD
Const _i2c_lcd_address_w = &B01001110
Const _lcd_bl = 1                                           'Backlight yes/no
És ennyi. Ebből gondoltam hogy a libes verzióhoz csak ez a két konfig kell.

Valóban el kellene felejteni a szimulátort, de alkatrész és műszerezettség hiányában kb-ra belőni itt is lehet, és az esetek többségében egész jól szimulált a cucc.

Az ic-ket összenézem köszi.

Hol találok infót libek írásához?
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 lib-ek jellemzően gépi kódúak. A Bascom súgóban van utalás, hogy mely regiszterek piszkálhatóak szabadon és melyek kellenek a Bascom működéséhez.

Ami nálam fontos volt:
@genius -> várakozás
*BASIC: -> Bascom utasítsok írhatóak, DE: komplex, Statikus RAM kezelő utasítások esetén keveredés lehet!

Az LCD kezelés a Bascom oldalon levő PCF8574P ICre írt LCD kezelés lett továbbgondolva... Így a Bascom által biztosított LCD rutinok hazsnálhatóak....
Avatar
petern7
Újonc
Újonc
Hozzászólások: 2
Csatlakozott: 2011. január 12. szerda, 7:00

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

Szia!
AVR Duino Shield Ext1 + LCD, -hez kellene doksi, ill. bekötési rajzok,
alkalmazások, ha lehetséges.
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 letöltések közt kinn van minden (doku, bekötés).
Minták a Bascom könyvben elszórtan.... Ill a letöltések közt egy komplex alkalmazás....

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

'********************************************************************
'* Program nev: Duino-Mini-all.bas                                  *
'* Board      : AVR-Duino MiniBoard v1                              *
'* Fordito    : BASCOM AVR, (V.1.11.9.1R)                           *
'* Datum      : 2008-05-28                                          *
'* Honlap     : http://avr.tavir.hu                                 *
'*                                                                  *
'* Irta       : Cseh Róbert                                         *
'* E-mail     : csehrobert@tavir.hu                                 *
'********************************************************************


'--- Alapadatok ---
$crystal = 16000000                                         'Sebesseg
'$regfile = "M168def.dat"                                    'Chip
'$regfile = "M8def.dat"                                      'Chip
$regfile = "M328pdef.dat"                                   'Chip
$baud = 9600
$swstack = 128
$hwstack = 128
$framesize = 128

Declare Sub I2c_lcd_portkiir

Config Portd.3 = Input                                      'Int1
Portd.3 = 1




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

Led Alias Portb.5
Config Led = Output                                         'LED a PortB.5
Set Led

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

Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portd.6 , Db5 = Portd.7 , Db6 = Portb.0 , Db7 = Portb.1 , E = Portd.5 , Rs = Portd.4
Lcd_bl Alias Portb.5
Config Lcd_bl = Output                                      'LCD háttérvilágítás
Reset Lcd_bl

Config Adc = Single , Prescaler = Auto , Reference = Internal

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

Dim Tempmsb As Byte                                         'Egesz fok
Dim Templsb As Byte                                         'Tort fok
Const T75aw = &H90                                          'Irasi cim  (1001.000r)


'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 = 1                                    'Backlight yes/no
'   Config Lcd = 20 * 4
   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 = 1                                     'hattervilagitas

'I2C EEPROM
   Declare Sub I2c_ram_write(address_desired As Word , Content As Byte)
   Declare Sub I2c_ram_read(address_desired As Word)
   Dim I2c_eeprom_address_desired As Word                   ' I2C EEPROM address counter (provides for 65536 locations).
   Dim I2c_eeprom_address_high_byte As Byte                 ' High byte of EEPROM address.
   Dim I2c_eeprom_address_low_byte As Byte                  ' Low byte of EEPROM address.
   Dim I2c_eeprom_counter As Byte
   Const Eeprom_chip_write_command = &B10100000             ' Family "A", Device/unit 1, write.
   Const Eeprom_chip_read_command = &B10100001              ' Family "A", Device/unit 1, Read.

'1Wire
   Config 1wire = Portb.3                                   'use this pin
   Dim 1wire(8) As Byte

'Clock
   Dim S As Byte                                            'Second
   Dim M As Byte                                            'Min
   Dim H As Byte                                            'Hour
   Dim D As Byte                                            'Year and day
   Dim Month As Byte                                        'Month
   Dim Yd As Byte
   Dim Wm As Byte
   Const Clkaddr = &HA2                                     'A2


Config Int1 = Falling
On Int1 Stopbutton
Enable Int1
Enable Interrupts

Gosub Csipog1

Initlcd
Cls
Initlcd
Cls

Do
   Print "{027}[2J 1 - LCD"
   Print " 2 - Toggle LED"
   Print " 3 - Speaker"
   Print " 4 - I2CLocator"
   Print " 5 - Thermo"
'   Print " 6 - RS485 (Send 4+ENT)"
   Print " 7 - AD (Vcc12;Photo)"
   Print " 8 - Orabeallitas"
   Print " 9 - Orakiolvasas"
   Print "10 - EEPROM"
'   Print "11 - Direct IN (Port/Pin)"
   'Print "12 - Direct OUT"
   Print "13 - 1Wire"
'  Print "14 - PS2 Kbd"
'  Print "19 - BackLight"

' ---   LCD kezelese ---
'   Print "30 - MCP23017 Init"
'   Print "31 - LCDteszt (MCP23008)"
'   Print "32 - LCDteszt (MCP23017)"
'   Print "33 - Nyomogombteszt (MCP23017)"


   Input "Prg 1-33 " , Temp1b

   Select Case Temp1b
      Case 1 : Gosub Prog1
      Case 2 : Gosub Prog2
      Case 3 : Gosub Prog3
      Case 4 : Gosub Prog4
      Case 5 : Gosub Prog5
      Case 6 : Gosub Prog6
      Case 7 : Gosub Prog7
      Case 8 : Gosub Prog8
      Case 9 : Gosub Prog9
      Case 10 : Gosub Prog10
      Case 11 : Gosub Prog11
      Case 12 : Gosub Prog12
      Case 13 : Gosub Prog13
      Case 14 : Gosub Prog14
      Case 15 : Gosub Prog15
      Case 16 : Gosub Prog16
      Case 17 : Gosub Prog17
      Case 18 : Gosub Prog18
      Case 19 : Gosub Prog19
      Case 30 : Gosub Prog30
      Case 33 : Gosub Prog33
   End Select
Loop
End


Prog1:
   Cls
   Lcd "1234567890123456"
   For Temp1b = 1 To 16
      Shiftlcd Left
      Waitms 50
   Next Temp1
Return

Prog2:
   Print
   Print "Toggle Pin13"
   Toggle Led
Return

Prog3:
   Sound Speaker , 62 , 2484
   Sound Speaker , 165 , 1861
Return


Prog4:
   'I2C detect
   Print "I2c-locator 1=no_device 0=device"
   Print
   Print "     0    2    4    6    8    A    C    E"
   Print " 00 ";
   For Temp1b = 0 To 254 Step 2
      Temp2b = Temp1b Mod 16                                ' addresses
      If Temp2b = 0 And Temp1b > 0 Then
         Print                                              ' end of line?
         Print " " ; Hex(temp1b) ; " ";
      End If
      I2cstart                                              ' generate start
      I2cwbyte Temp1b
      Print " " ; Err ; "   ";                              ' 1 no device, 0 device
      I2cstop
   Next Temp1b
   Print
   Wait 3
Return


Prog5:
   I2cstart
   I2cwbyte T75aw
   I2cwbyte &H00
   I2cstop
   I2cstart
   Temp1b = T75aw + 1
   I2cwbyte Temp1b
   I2crbyte Tempmsb , Ack
   I2crbyte Templsb , Nack
   I2cstop
   If Templsb = 128 Then Templsb = 5 Else Templsb = 0
   Locate 4 , 1
   Print "OnBrd:" ; Tempmsb ; "," ; Templsb ; ""
   Wait 3
Return

Prog6:
Return

Prog7:
   Start Adc
   Print "Fenyelem:" ; Getadc(3)
   Print "Pot     :" ; Getadc(2)
   Print "Tuske   :" ; Getadc(1)
   Print "Betap   :" ; Getadc(0)
   Stop Adc
   Wait 3
Return


   Prog8:
      Print "{027}[2JSettime"
      Input "Month   " , Month
      Input "Year&Day" , D
      Input "Hour    " , H
      Input "Minute  " , M
      Input "Second  " , S
      S = Makebcd(s)                                        'seconds
      M = Makebcd(m)                                        'minutes
      H = Makebcd(h)                                        'hours
      D = Makebcd(d)                                        'days
      Month = Makebcd(month)                                'months
      I2cstart                                              'generate start
      I2cwbyte Clkaddr                                      'write address
      I2cwbyte 0                                            'select control register
      I2cwbyte 8                                            'set year and day bit for masking
      I2cstart                                              'repeated start
      I2cwbyte Clkaddr                                      'write mode
      I2cwbyte 2                                            'select seconds Register
      I2cwbyte S
      I2cwbyte M
      I2cwbyte H
      I2cwbyte D
      I2cwbyte Month
      I2cstop
   Return

   Prog9:
      Print "{027}[2JGettime"
      Do
         I2cstart                                           'generate start
         I2cwbyte Clkaddr                                   'write addres of PCF8583
         I2cwbyte 2                                         'select second register
         I2cstart                                           'generate repeated start
         Temp1b = Clkaddr + 1
         I2cwbyte Temp1b                                    'write address for reading info
         I2crbyte S , Ack                                   'read seconds
         I2crbyte M , Ack                                   'read minuts
         I2crbyte H , Ack                                   'read hours
         I2crbyte Yd , Ack                                  'read year and days
         I2crbyte Wm , Nack                                 'read weekday and month
         I2cstop                                            'generate stop

         Print Chr(27) ; "[2;2f";                           ' VT100 emulation set pos to 2,2
         Print "Time "
         Print Bcd(h) ; ":" ; Bcd(m) ; ":" ; Bcd(s)
         Print "Day : " ; Bcd(yd) ; " Month : " ; Bcd(wm) ; " Err:" ; Err
         Waitms 50
      Loop Until Inkey() = 27
   Return

   Prog10:
      Input "Irasteszt (0-kihagy)" , Temp1b
      If Temp1b = 0 Then Goto Prog10olvas
      I2c_eeprom_address_desired = 0                        ' We start writing at EEPROM address zero.
      Print "Start I2CWrite (32 byte)"
      Temp1b = 0                                            ' Generate test data (=0<256).
      Do
         Call I2c_ram_write(i2c_eeprom_address_desired , Temp1b)       ' Write it to the EEPROM.
         Incr I2c_eeprom_address_desired                    ' Increment EEPROM address location desired.
         Incr Temp1b                                        ' Generate test data (=0<256).
         Toggle Led
      Loop Until I2c_eeprom_address_desired = 32
      Print "Mind beirva."                                  ' Tell what is going on.
      Prog10olvas:
      Print
      Print "Visszaolvasas...."

      I2c_eeprom_address_desired = 0                        ' We start reading at EEPROM address zero.
      Do
         Call I2c_ram_read(i2c_eeprom_address_desired)      ' Call sub to read from device.
         Decr I2c_eeprom_counter                            ' Decrement loop counter.
         If Err = 0 Then                                    ' Check status of operation.
            Print "OK:  " ; I2c_eeprom_address_desired ; " " ; Temp1b       ' Report success.
         Else                                               ' or
            Print "Hiba:" ; I2c_eeprom_address_desired      ' Reeort failure.0
         End If
         Incr I2c_eeprom_address_desired                    ' Increment address counter.
         Waitms 100
      Loop Until I2c_eeprom_address_desired = 32
      Print "Visszaolvasva"                                 ' Tell what is going on.
      Wait 5
   Return


   Prog13:
      Print "1-wire"
      Print
      1wreset                                               'reset the device
      Print "Err:" ; Err                                    'print error 1 if error
      1wwrite &H33                                          'read ROM command
      For Temp1b = 1 To 8
         1wire(temp1b) = 1wread()                           'place into array
      Next
      'You could also read 8 bytes a time by unremarking the next line
   'and by deleting the for next above
   'Ar(1) = 1wread(8)                                           'read 8 bytes

      For Temp1b = 1 To 8
         Print Temp1b ; ": " ; Hex(1wire(temp1b))           'print output
      Next
      Print                                                 'linefeed
      Wait 5
   Return



   Prog30:
      'I2CInit
      Inputhex "MCP23017 - LCD address (hex):" , Temp1b
      I2cinit
      I2cstart                                              'Sends start condition
      I2cwbyte Temp1b                                       '000 cimu eszkoz (kimenet)IOCON regiszter beállítása
      I2cwbyte &H0A                                         'A es B
      I2cwbyte Iocon
      I2cstop

      I2cstart                                              '000 - Kimenet B csatorna beállítás
      I2cwbyte Temp1b
      I2cwbyte 1
      I2cwbyte Iodirki
      I2cstop


      'Device be
      I2cstart                                              '000 - Bemenet A csatorna beállítás
      I2cwbyte Temp1b                                       'A
      I2cwbyte 0
      I2cwbyte Iodirbe
      I2cstop

      I2cstart                                              '000 - Bemenet A Pull Up beállítás
      I2cwbyte Temp1b                                       'A
      I2cwbyte &H0C
      I2cwbyte 255
      I2cstop

      I2cstart                                              '000 - Bemenet A Invert beállítás
      I2cwbyte Temp1b                                       'A
      I2cwbyte &H02
      I2cwbyte 255
      I2cstop

      Waitms 15
      'set 8-bit mode (attention)
      'toggle the E -line
      I2c_lcd_b = &B10000011
      Call I2c_lcd_portkiir
      I2c_lcd_b = &B00000011
      Call I2c_lcd_portkiir

      Waitms 4

      'set 8-bit mode (attention)
      I2c_lcd_b = &B10000011
      Call I2c_lcd_portkiir
      I2c_lcd_b = &B00000011
      Call I2c_lcd_portkiir

      Waitms 1

      'set 8-bit mode (attention)
      I2c_lcd_b = &B10000011
      Call I2c_lcd_portkiir
      I2c_lcd_b = &B00000011
      Call I2c_lcd_portkiir

      Waitms 4

      'set 4-bit operation
      I2c_lcd_b = &B10000011
      Call I2c_lcd_portkiir
      I2c_lcd_b = &B00000011
      Call I2c_lcd_portkiir


      Waitms 1
      'set 8-bit mode (attention)
      I2c_lcd_b = &B10000010
      Call I2c_lcd_portkiir
      I2c_lcd_b = &B00000010
      Call I2c_lcd_portkiir


      I2c_lcd_b = &B10001000
      Call I2c_lcd_portkiir
      I2c_lcd_b = &B10001000
      Call I2c_lcd_portkiir


      Waitms 1

      I2c_lcd_b = &B10000000
      Call I2c_lcd_portkiir
      I2c_lcd_b = &B00000000
      Call I2c_lcd_portkiir


      'Display off, cursor off, blink off
      I2c_lcd_b = &B10001000
      Call I2c_lcd_portkiir
      I2c_lcd_b = &B00001000
      Call I2c_lcd_portkiir

      Waitms 1

      I2c_lcd_b = &B10000000
      Call I2c_lcd_portkiir
      I2c_lcd_b = &B00000000
      Call I2c_lcd_portkiir

      'display on, cursor off, blinking off
      I2c_lcd_b = &B10001100
      Call I2c_lcd_portkiir
      I2c_lcd_b = &B00001100
      Call I2c_lcd_portkiir

      Waitms 1

      I2c_lcd_b = &B10000000
      Call I2c_lcd_portkiir
      I2c_lcd_b = &B00000000
      Call I2c_lcd_portkiir


      'clear display and send cursor to address 0
      I2c_lcd_b = &B10000001
      Call I2c_lcd_portkiir
      I2c_lcd_b = &B00000001
      Call I2c_lcd_portkiir

      Waitms 1
   Return


   Prog33:
      'I2C_lcd_gomb
      Inputhex "MCP23017 - LCD address (hex):" , Temp1b
      I2cstart
      I2cwbyte Temp1b
      I2cwbyte &H12
      I2cstop
      I2cstart
      Temp1b = Temp1b + 1
      I2cwbyte Temp1b
      I2crbyte Temp2b , Nack
      I2cstop
      Decr Temp1b
      Waitms 10                                             'prell kivedese
      I2cstart
      I2cwbyte Temp1b
      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 Prog15
      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"
      Wait 3
   Return


Prog19:
   Cls
   '1234567890123456
   Lcd "   AVR-Duino    "
   Locate 2 , 1
   Lcd "  avr.tavir.hu  "
   Set Led
Return


Prog11:
Prog12:
Prog14:
Prog15:
Prog16:
Prog17:
Prog18:


Return


Sub I2c_ram_write(address_desired As Word , Content As Byte)       ' Writes data to the I2C EEPROM.
   I2c_eeprom_address_low_byte = Low(address_desired)       ' Extract low byte of address to be written.
   I2c_eeprom_address_high_byte = High(address_desired)     ' Extract high byte of addesss to be written.
   I2cstart                                                 ' Send I2C Start.
   I2cwbyte Eeprom_chip_write_command                       ' Select MicroChip EEPROM device type, address and write bit.
   I2cwbyte I2c_eeprom_address_high_byte                    ' Send high address to write to.
   I2cwbyte I2c_eeprom_address_low_byte                     ' Send low address to write to.
   I2cwbyte Content                                         ' Send the data to be written.
'   If Err = 0 Then                                          ' check status of operation.
'      Print "OK:   " ; Address_desired                      ' Report success.
'   Else                                                     ' or
'      Print "Hiba: " ; Address_desired                      ' Report failure.
'   End If
   I2cstop                                                  ' All we want to do is done.
   Waitms 10                                                ' Wait for write to finish up.
End Sub

Sub I2c_ram_read(address_desired As Word)                   ' Reads data from the I2C EEPROM.
   I2c_eeprom_address_low_byte = Low(address_desired)       ' Extract low byte of address to be read.
   I2c_eeprom_address_high_byte = High(address_desired)     ' Extract high byte of address to be read.
   I2cstart                                                 ' Send I2C Start..
   I2cwbyte Eeprom_chip_write_command                       ' Select MicroChip EEPROM device type, address and write bit
   I2cwbyte I2c_eeprom_address_high_byte                    ' Send high byte of address to read from.
   I2cwbyte I2c_eeprom_address_low_byte                     ' Send low byte of address to read from.
   I2cstart                                                 ' Issue another start sequence.
   I2cwbyte Eeprom_chip_read_command                        ' Select MicroChip EEPROM device type, address and read bit
   I2crbyte Temp1b , Nack                                   ' Read data from desired location in chip.
   I2cstop                                                  ' All we want to do is done.
End Sub



Sub I2c_lcd_portkiir
   I2c_lcd_b.bit_bl = I2c_lcd_bl
   I2cstart
   I2cwbyte Temp1b
   I2cwbyte &H15
   I2cwbyte I2c_lcd_b
   I2cstop
End Sub


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


Stopbutton:
   Waitms 10
   Locate 1 , 1 : Lcd "STOP"
   'Gifr = 128
   Wait 1
Return
Avatar
Balthasar
Újonc
Újonc
Hozzászólások: 6
Csatlakozott: 2011. április 29. péntek, 6:00

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

Sziasztok! Egy 2x16-os LCD-t szeretnék beépíteni a kütyümbe. Hogyan szokás bontható módon bekötni az LCD 16 pólusú csatiját? Első nekifutásra nem találok egysoros, 16 pólusú szalagkábel csatlakozót. Köszi! Balthasar
Avatar
Balthasar
Újonc
Újonc
Hozzászólások: 6
Csatlakozott: 2011. április 29. péntek, 6:00

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

Tárgytalan, 2x8-ast rakok rá és a panel háta mögött vezetem el a szalagkábelt.
Válasz küldése