benleentje
Golden Member
Ben nu met een leuk projectje bezig om een I2C lcd display aan te sturen met een PIC 16F628.
Ik schrijf in proton+ of tewel picbasic.
Ik heb eerst de instructies hbstart hbout enz gebruikt. Kreeg totaal geen reactie van het lcd.
Heb daarna zelf een software matige oplossing gemaakt om te kunnen zien of het lcd uberhaupt wel reageerde. Uieindelijk kreeg ik een acknoledge terug. Dus joepie
het lcd reageerde uioteindelijk.
Nu probeer ik de uart in de chip aan de gang te slingeren deze moet dus op synchrone communicatie enzv ingesteld worden. Maar nu het probleem er wordt in de datasheet nergens gerept over start en stop conditie. Dus niet of deze automatische gegenreerd worden of dat je dat zelf moet doen. Nu weet ik ondertussen wel hoe ik dat zelf kan doen maar de vraag is dus?
Is synchrone communicatie nu hetzelfde als I2C of niet. Want in de hele data sheet komt daar eigenlijk niets over voor.
2de vraag. Zitten er nu 1 of 2 Uart is gezien de volgende zin uit de datasheet.
The Universal Synchronous Asynchronous Receiver
Transmitter (USART) module is one of the two serial
I/O modules. (USART is also known as a Serial Communications
Interface or SCI).Uit een datasheet van een AVR komt wel het verhaal van I2C naar voren maar daar heb ik geen ontwikkelbord voor en wil me nu eigenlijk eerst eens in PIC's verdiepen en daarna pas weer in een AVR.
Ik zie door de I2C's mijn bits niet meer 
hadv
Just find out what you like and let it kill you
Neemt niet weg dat je niet kunt bit-bangen. Vincent heeft een leuk stuk geschreven over de werking van de I2C :
http://www.proto-labs.com/i2cfaq/i2cfaq_000_index.htm
Groeten, Bram
benleentje
Golden Member
Je bedoelt neem ik aan synchrone uart en I2C zijn verschillende zaken.
Okee zeer bedankt voor dat antwoord. Ik vermoede dat al tenzeerste.
Maar het is verder een zeer simpel I2C lcd display die geen data kan versturen. kan ik dus gewoon zoals ik in mijn oefen programma heb gedaan eerst software matig een start conditie geven en daarna de synchrone uart een byte laten uitklokken en daarna weer software matig op de acknowledge wachten.
of
een andere chip maar dat is tegen mijn principes wil het graag met deze proberen.
Lucky Luke
Eluke.nl | handgetypt | I'm a poor, lonesome cowboy, with a long, long way to go.
er zit software I2C in picbasic, met de bstart,bstop,busout,en busin instructies. Dus zonder de H van Harware ervoor.
Synchrone UART? De A staat voor asynchroon.
Als je in PicBasic programmeert maakt het niet uit dat er in een 16F628 geen hardware I2C interface zit. Je maakt gewoon gebruik van de I2COUT en I2CIN commandos en de software doet de rest.
benleentje
Golden Member
Ja daar heb je gelijk in jowi.
Het moet USART zijn
universal synchronus asynchronus receiver transmitter. ha ha 
I2Cout en I@cin bestaat niet in picbasic.
En dat bstart, busout zonder H werkt ook niet.
Dan ga ik maar mijn eigen routine schrijven voor dit display. Had het al voor elkaar met 100% software maar omdat de PIC later nog meer moet doen ga ik het nu met de usart proberen
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
I2CIN en I2COUT bestaan en zijn bedoeld voor uC's zonder MSSP module.
De IDE herkent ze nog niet (kan je toevoegen in database.mcd) maar de compiler neemt ze zonder problemen op.
' Send a byte to the I2C bus.
DIM VAR1 as BYTE ' We'll only read 8-bits
DIM Address as WORD ' 16-bit address required
SYMBOL Control = %10100000 ' Target an eeprom
SYMBOL SDA = PORTC.3 ' Alias the SDA (Data) line
SYMBOL SCL = PORTC.4 ' Alias the SSL (Clock) line
Address = 20 ' Write to address 20
VAR1 = 200 ' The value place into address 20
I2COUT SDA, SCL, Control , Address , [ VAR1 ] ' Send the byte to the eeprom
DELAYMS 10 ' Allow time for allocation of byte
Via F1, die laat twee keer BUSIN/BUSOUT zien, daar zitten de I2C comando's tussen verstopt (met verkeerde syntax in de eerste regel).
Het is even zoeken, maar ze zijn er.
Op 27 december 2008 09:26:01 schreef Lucky luke:
er zit software I2C in picbasic, met de bstart,bstop,busout,en busin instructies. Dus zonder de H van Harware ervoor.
In de beschrijving staat dat je daarvoor toch de MSSP module nodig bent, dus hardware I2C.
En met die instructies kan je nog steeds niet zelf de SCL en SDA pins configureren, wat toch wel een must is. 
(ok, er zijn DECLARE's).
En in de Whats new.htm file:
Additions, amendments and fixes made in version 3.2.5.2 of the PROTON+ Compiler. (3rd October 2006)
ADDITIONS
[...]
Added commands I2CIN and I2COUT. These communicate with the I2C bus and operate similarly to BUSIN and BUSOUT
but have user configurable SDA and SCL pins.
Syntax: -I2CIN SDA Pin , SCL Pin , Control , { Address }, [ Variable {, Variable...} ]
I2COUT SDA Pin , SCL Pin , Control , { Address }, [ Variable {, Variable...} ]
EDIT: Er is wat vreemds aan de hand, volgens de manuals (v3.1 en v3.3) gebruikt BUSIN ed de MSSP module, oftwel alleen bruikbaar op uC's met I2C hardware. In de F1 help is daar geen sprake van, dus software I2C mogelijk.
Op een na alle I2C DECLARE's zijn aleen voor BUSIN ed, want die worden normaal door de hardware geregeld.
Lijkt mij logisch dat BUSIN ed toch voor software bedoelt is, het is ook niet duidelijk waarom er een copy van HBUSIN ed nodig is.
[Bericht gewijzigd door Henry S. op (11%)]
benleentje
Golden Member
Met busin en busout kan ik inderdaad met declare de scl en sda pij configureren.
In jouw voorbeeld zie ik dat je een delayms 10 geeft en in de voorbeelden van proton zie ik verder geen delay voorbij komen.
Heb vandaag het met de Usart geprobeerd maar dat geeft nog geen resultaat. Het is ook niet te zeggen of de PIC iets fout doet of dat het LCD gewoon niet reageerd.
Maar gisteren met volledig software control weet ik zeker dat ik een reactie terug kreeg van het LCD.
HEt is een display van voti mischien dat anderen er ervaring mee hebben.
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Heb vandaag het met de Usart geprobeerd maar dat geeft nog geen resultaat.
Logisch. Zoals reeds eerder gezegd heeft de USART totaal niets met I2C te maken. Hiervoor is de SSP/SPI
benleentje
Golden Member
Ja ik kan ook lezen 
Maar dat wil nog niet zeggen dat ik usart niet kan gebruiken. In initialiseer eerst software matig een start conditie klok dan via de Usart een byte uit. En daarna doe ik software matig de ack en de stop conditie.
Maar ik denk dat ik de verkeerde pull-up weerstanden heb gebruikt volgends de data sheet van het LCD moest het 100KΩ zijn en volgens universele I2C bus mag het niet meer dan 4k7Ω zijn. Ga dat nu maar eens veranderen.
MAH
Every machine is a smoke machine if you operate it wrong enough
ik gebruik een iets andere compiler (picbasic pro v2.47).
maar om me bij henry aan te sluiten even een voorbeeld.
Ik heb het probleemloos werkend op een 16f648 met een ds1307.
'device config
@ device pic16F648a, INTRC_OSC_NOCLKOUT
@ device pic16F648a, MCLR_OFF'ON
@ device pic16F648a, LVP_OFF
@ device pic16F648a, WDT_OFF
@ device pic16F648a, PWRT_ON
@ device pic16F648a, BOD_OFF'ON
' Defines
' ----------------
'I2C pins
DS_SCL VAR PORTA.0 ' I2C clock pin
DS_SDA VAR PORTA.1 ' I2C data pin
SecReg CON $00 ' seconds address (00 - 59)
' MSB of SecReg must be set to a 0 to enable RTC
MinReg CON $01 ' minutes address (00 - 59)
HourReg CON $02 ' hours address (01 - 12) or (00 - 23)
DayReg CON $03 ' day address (1 - 7)
DateReg CON $04 ' date address (01 - 28/29, 30, 31)
MonthReg CON $05 ' month address (01 - 12)
YearReg CON $06 ' year address (00 - 99)
ContReg CON $07 ' control register
RTCflag CON 0 ' RTC flag (location 0 of internal EEPROM)
cntrl CON %00010000 ' sets the SQW/OUT to 1Hz pulse, logic level low
I2CWrite DS_SDA, DS_SCL, $D0,$00,[_sec,_min,_hr,_day,_date,_mon,_yr,cntrl]
en
I2CRead DS_SDA,DS_SCL,$D0,$00, [sec,MINs,hr,day,date,mon,yr] ' Read Ds1307
even uit de code geraapt.
iets anders geschreven maar kijk even naar henry's code.
benleentje
Golden Member
Ik zit hier met versie 1.0.0.1
En die kan helemaal niets met jouw code krijg alleen errors.
Ook I2Cwrite wordt niet herkent
Op 27 december 2008 22:42:28 schreef benleentje:
Ik zit hier met versie 1.0.0.1
Dan houdt het op, zie mijn eerdere post.
Waarom die oerversie?
1.0.0.1 is btw de IDE versie, welke compiler versie heb je daarbij?
Zie ook http://www.circuitsonline.net/forum/view/68278
[Bericht gewijzigd door Henry S. op (24%)]
benleentje
Golden Member
ide version 1.0.0.1
compilerversion 2.2.0.20
copyright 2004
Heb deze volledige versie van iemand overgenomen die er niets meer mee deed.
Lucky Luke
Eluke.nl | handgetypt | I'm a poor, lonesome cowboy, with a long, long way to go.
Ik heb hier proton+ PICBASIC development suite, en er is echt een software I2C mogelijkheid. Ik weet de commando's niet meer echt zeker dus als die uit mijn vorige post niet werken zat ik er half naast, maar het is er wel. Ik heb met een 16F628A al met een 24AA1024 en met een DS1307 gepraat. De code's daarvan staan ook op CO, een in het topic over de nieuwe code voor Xantus kit nixie klok, de andere iets met een GPS en een CanSat.
Die GPS recorder is trouwens wel precies hoe je niet met een EEPROM om moet gaan, maar voor een cansat voldoet het prima (2 lanceringen en evt. EEPROM vervangen)
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Maar ik denk dat ik de verkeerde pull-up weerstanden heb gebruikt volgends de data sheet van het LCD moest het 100K zijn en volgens universele I2C bus mag het niet meer dan 4k7 zijn.
Hangt er vanaf of het standard, fast, of fast+ is, en de buscapaciteit:

Op 27 december 2008 23:38:57 schreef benleentje:
ide version 1.0.0.1
compilerversion 2.2.0.20
copyright 2004Heb deze volledige versie van iemand overgenomen die er niets meer mee deed.
Updaten als je er meer mee wilt doen.
Op 29 december 2008 18:57:14 schreef Lucky luke:
Ik weet de commando's niet meer echt zeker dus als die uit mijn vorige post niet werken zat ik er half naast, maar het is er wel.
Je zat er niet naast, manual is wat onduidelijk.
benleentje
Golden Member
Ik krijg het display niet werkend zelfs niet met een 16f877 die wel een een echte I2C bus heeft. Zelfs met andere weerstanden niet. Denk dat ik het display mishandelt heb. Het is jammer. Kijken of ik een ander kan krijgen. Het is dat de maten zo klein zijn. Het is iets van 60 * 18 mm wat ik aan display ruimte heb voor dat apparaat.
Maar gelukkig leer je ook van mislukte projecten.
benleentje
Golden Member
Nu ondertussen wel een ander IC in de buurt maar helaas geen tot weinig tijd. Ben net terug van een korte vakantie. Had er wel I-net maar helaas geen programmer en aanverwante elektronica.