Da's wel weer software 'matige' i2c...
(TS heeft hardware i2c, dus dan ga je niet met bitbangen aan de gang...)
Special Member
Da's wel weer software 'matige' i2c...
(TS heeft hardware i2c, dus dan ga je niet met bitbangen aan de gang...)
Golden Member
Ik had je al een keer een voorbeeld gegeven voor de DS1307.
Dat klopt, Lambiek. Maar dat kreeg ik niet werkend.
Het was voor een PIC16F877 en moest eerst alles 'omzetten' naar een PIC 16F1826. Daarnaast gaf het bij mij een aantal compilatie-errors.
De DS3231 is functioneel gelijk aan de DS1307, zij het dat bij de DS1307 inderdaad bit 7 van adres $00 wordt gebruikt voor aan-of uitzetten van de oscillator.
De code die je zojuist gaf
pic basic code:
;------------------------------------
; LEZEN EN SCHRIJVEN NAAR DE DS1307.
;------------------------------------
BStart ; Bus start
BusIn %11010001,0,[SECONDE] ; Lees seconde + bit7 (is osc. aan/uit)
DelayMS 10 ; Wacht 10ms
Clear SECONDE.7 ; Zet oscillator aan
BusOut %11010000,[SECONDE] ; Schrijf naar rtc
DelayMS 10 ; Wacht 10ms
BusIn %11010001,2,[UUR] ; Lees uur
DelayMS 10 ; Wacht 10ms
Clear UUR.6 ; Select 24 uur klok
BusOut %11010000,2,[UUR] ; Schrijf naar rtc
BStop ; Bus stop
werkt met BUSOUT. Ik begreep dat dat I2C softwarematig. Wil je gebruik maken van de ingebouwde MSSP module van de PIC, dan wordt HBUSOUT voorgesteld lees ik in de Compiler Doc.
Maar los daarvan: de HBUSIN en HBUSOUT doen bij mij gewoon niks met de RTC.
Vandaar dat ik het programma helemaal had teruggebracht (dus zonder LCD)
om alle neven factoren uit te sluiten. Maar een simpele schrijfopdracht naar de RTC lukt me maar niet....
HET WERKT!!! die stomme LVP pin
Kan schrijven en lezen van een DS3231, de synchronisatie van het display met de seconden kan beter maar dat is voor later.
Mijn doel is de SecondenPin van die module te kunnen gebruiken, die blijkt heel stabiel te zijn.
pic basic code:
'****************************************************************
'* Name : UNTITLED.BAS *
'* Author : [select VIEW...EDITOR OPTIONS] *
'* Notice : Copyright (c) 2019 [select VIEW...EDITOR OPTIONS] *
'* : All Rights Reserved *
'* Date : 03-Oct-19 *
'* Version : 1.0 *
'* Notes : *
'* : *
'****************************************************************
Device = 16F887
Config1 FOSC_INTRC_CLKOUT, WDTE_OFF, PWRTE_OFF, MCLRE_ON, CP_OFF, CPD_OFF, BOREN_ON, IESO_ON, FCMEN_ON, LVP_OFF, DEBUG_OFF
Config2 BOR4V_BOR40V, WRT_OFF
Declare Xtal 8
All_Digital true
OSCCON = %11110000 'Oscillator goed zetten voor 8Mhz
'-------------------------------
Declare LCD_Type 0
Declare LCD_ENPin PORTD.1 'En-pin
Declare LCD_RSPin PORTD.0 'RS pin
Declare LCD_DTPin PORTD.4 '4 lines interface
Declare LCD_Lines 2
Declare LCD_Interface 4
Declare LCD_DataUs = 50
Declare LCD_CommandUs = 2000
;Er wordt gebruik gemaakt van de hardware (MSSP) module in de PIC
;Dat zijn RC.4 (pin 23) voor de SDA en RC.3 (pin 18) voor de SCL
Dim Temp1 As Byte
Dim Temp2 As Byte
Dim TempVal As Byte
Dim Seconden As Byte
Dim Minuten As Byte
Dim Uren As Byte
Dim Dag As Byte
Dim Datumdag As Byte
Dim Maand As Byte
Dim Jaar As Byte
Dim Ctrl As Byte
Dim Secs_last As Byte
DelayMS 100
Seconden = 00
Minuten = 30
Uren = 11
Dag = 1
Datumdag = 14
Maand= 10
Jaar = 19
Ctrl = 0 ; Control byte)
GoSub Datum_Tijd_Instellen ; initiële datum en tijd naar de RTC
Cls
While 1 = 1
GoSub Datum_Tijd_Ophalen
Print At 1,1, "Tijd: ", Dec2 Uren, ":", Dec2 Minuten, ":", Dec2 Seconden
Print At 2,1, "Dat: ", Dec2 Datumdag , "/", Dec2 Maand, "/", Dec2 Jaar
If Dag=1 Then Print At 2,15,"Ma"
If Dag=2 Then Print At 2,15,"Di"
If Dag=3 Then Print At 2,15,"Wo"
If Dag=4 Then Print At 2,15,"Do"
If Dag=5 Then Print At 2,15,"Vr"
If Dag=6 Then Print At 2,15,"Za"
If Dag=7 Then Print At 2,15,"Zo"
DelayMS 500
Secs_last = Seconden
Wend
Datum_Tijd_Instellen: 'Instellen Datum en Tijd op de RTC
TempVal=Seconden
GoSub BIN_TO_BCD
Seconden=TempVal
TempVal=Minuten
GoSub BIN_TO_BCD
Minuten=TempVal
TempVal=Uren
GoSub BIN_TO_BCD
Uren=TempVal
TempVal=Dag
GoSub BIN_TO_BCD
Dag=TempVal
TempVal=Datumdag
GoSub BIN_TO_BCD
Datumdag=TempVal
TempVal=Maand
GoSub BIN_TO_BCD
Maand=TempVal
TempVal=Jaar
GoSub BIN_TO_BCD
Jaar=TempVal
HBStart
HBusOut %11010000, 0, [Seconden, Minuten, Uren , Dag, Datumdag , Maand, Jaar, Ctrl] 'Write initial values for time / Date
HBStop
Return
Datum_Tijd_Ophalen:
HBStart
HBusIn %11010001, 0, [Seconden, Minuten, Uren , Dag, Datumdag , Maand, Jaar, Ctrl]
HBStop
'De RTC werkt met BCD waarden, daarom moeten ze worden veranderd in Binair tbv display doeleinden
TempVal=Seconden
GoSub BCD_TO_BIN
Seconden=TempVal
TempVal=Minuten
GoSub BCD_TO_BIN
Minuten=TempVal
TempVal=Uren
GoSub BCD_TO_BIN
Uren=TempVal
TempVal=Dag
GoSub BCD_TO_BIN
Dag=TempVal
TempVal=Maand
GoSub BCD_TO_BIN
Maand=TempVal
TempVal=Jaar
GoSub BCD_TO_BIN
Jaar=TempVal
DelayMS 100
Return
'------------Converteer BIN naar BCD -------------------
BIN_TO_BCD:
Temp1 = Dig TempVal, 0
Temp2 = Dig TempVal, 1
Temp2 = Temp2 << 4
TempVal = Temp1 ^ Temp2
Return
'------------Converteer BCD naar BIN--------------------
BCD_TO_BIN: ; Converteer BCD naar BIN
Temp1 = $0F & TempVal ; Clear top vier bits
Temp1 = Dig Temp1, 0
Temp2 = TempVal >> 4 ; 4 posities opschuiven om een 2 BCD waarde te lezen
Temp2 = Dig Temp2, 0
TempVal = Temp2 * 10 + Temp1
Return
edit: er zit nog een foutje in de Datumdag omzetting, maar das niet belangrijk voor het ogenblik...een jobke voor Bavelt
Golden Member
Nou,..het 'jobke' voor bavelt is allereerst om het maar eens aan de praat zien te krijgen...
Lukt niet.
Ik heb een PIC 16F1826. De I2C pinnnen daarvan zijn Poort B.1 voor SDA en Poort B.4 voor de SCL.
Voor de LCD datalijnen is geen andere keuze dan Poort A.0 t/m A.3 (omdat in PicBasic de poorten elkaar moeten opvolgen. A4 is al niet bruikbaar vanwege de MCLR).
Dit heb ik daarom dus aangepast in het programma.
Na de eerste HBSTART raakt het display al van streek (zo werkt de CLS dan al niet meer).
De HBUSIN geeft de genadeklap, want dan hangt de boel (of de processor zit te wachten op iets wat hij niet krijgt..)
Het is toch echt om moedeloos van te worden.
Misschien toch maar weer gaan volleyballen ipv PIC's programmeren?
Als ik mij niet vergis heb jij toch ook een 16F887 om te proberen?
Golden Member
Ondertussen heb ik ook maar een PIC16F877A besteld. Gewoon om eens te zien of ik de bestaande programma's hier ook werkend kan krijgen.
Je zou geneigd zijn met een wantrouwende blik naar de hardware te kijken (DS3231, SSD1306), ware het niet dat het MikroBasic programma van Arco tadeloos draait in mijn opstelling.
Golden Member
Als ik mij niet vergis heb jij toch ook een 16F887 om te proberen
Posten hebben elkaar net gemist. Ik heb er een paar besteld (bij tante Alie, kan nog wel even duren).
Golden Member
Oops, Ik zie dat ik een PIC 16F877A heb besteld ipv een PIC16F887A..
Heb de 887 nu ook besteld (Bij Conrad, gaat sneller)...
[Bericht gewijzigd door Bavelt op maandag 14 oktober 2019 12:27:05 (11%)
Ik heb slechte ervaringen met Alie/Ebay controllers, ze wilden niet altijd programmeren maar je weet nooit...
Golden Member
Ik vroeg me wel eens af: Zal dag echt wat uitmaken?
Ik had het idee dat al dat spul vaak uit dezelfde fabriek komt.
Vermoedelijk bestelt Conrad het ook daar?
Golden Member
Ondertussen ben ik na een paar weken eigenlijk nog niet verder (behalve dan wat graafwerk in datasheets)
Ik ben kort geleden geswitched van een PIC16F628A omdat die geen MSSP module heeft met hardwarematige I2C ondersteuning naar een PIC16F1826 die dat wél aan boord heeft.
Maar zoals al 'gepost' krijg ik een ogenschijnlijk eenvoudige toepassing, een datum/tijd weergeven met een RTC (DS3231) en een LCD (HD44780) display maar niet aan de praat in PicBasic.
Special Member
Voor ic's die hier weinig kosten, ga ik mijn (on)geluk niet in Verweggistan zoeken... (liever helemaal niet met halfgeleiders)
Kans dat je troep krijgt is aanwezig en je moet lang wachten. (in ruil voor misschien een paar kwartjes 'winst')
Je overstap naar een andere processor heeft weinig met de problemen te maken, ik gebruik de 18F1826/27/47 heel vaak, nooit problemen.
Het zal iets met Picbasic zijn. Wellicht hebben ze de 1826 niet goed geimplementeerd. (ik weet niet hoe dat bij Picbasic gaat)
Bij Mikrobasic heb je voor iedere pic 2 files:
- 1 voor de linker (met de geheugenstructuur van de chip zodat de linker weet hoeveel geheugen er is en hoe dat in elkaar steekt)
- 1 met alle registers met hun register en bitnamen en waar ze precies zitten (adres)
Golden Member
Zoals al geopperd, misschien moet ik gewoon afscheid nemen van PicBasic en mijn vervolgstappen zetten in MikroBasic.
PicBasic geeft blijkbaar toch teveel beperkingen (zoals bv de datalijnen van de LCD).
Het feit dat ik al weken bezig ben om het aan de praat te krijgen is al een signaal.
Terwijl het MikroBasic programma, waar veel commando's look-a-like zijn aan PicBasic, zonder problemen draait.
Het zou ook zomaar kunnen dat het voor een andere PIC zomaar wél werkt.
Dat kan ik pas proberen als ik ze binnen heb.
Het fijne van Picbasic vond ik wel dat de cursus van PicBasic (www.picbasic.nl) heel vriendelijk en toegankelijk is opgesteld. En ook goed bruikbaar als naslagwerk. En je kon makkelijk even een kopietje maken van een programma; In MikroBasic moet je dan eerste een nieuw 'project' definiëren als ik het goed heb begrepen. Maar ok, dat is te doen.
Wellicht is er ook een (gebruiksvriendelijke) cursus van MikroBasic? Het alternatief is grasduinen in de help van de MikroBasic compiler maar dat is niet echt handig denk ik.
Voor ic's die hier weinig kosten
Waar bestel jij die dingen, Arco? Mijn lokale "e-boer" heeft niet zoveel van de PIC's. Ik kan bij hem wel bestellen bij Conrad zonder verzendkosten.
Maar Conrad heeft ook niet alles.
Special Member
Ik bestel meestal bij Farnell of RS...
Deze had ik al gegeven: http://download.mikroe.com/documents/compilers/mikrobasic/pic/mikrobas…
Nadeel van die picbasic cursus is wel dat alles wat er staat al 10 jaar oud is en vaak niet meer klopt...
Golden Member
Ik heb net even gekeken bij Farnell (kende ze niet).
Kan het echt kloppen dat je daar gewoon 1 Ic'tje bestelt en géén verzendkosten betaalt?
Ik dacht dat zoiets alleen maar vanuit China kon..
Ja, dat doen ze. Wel is het eigenlijk de bedoeling dat je een bedrijf bent en "meer" gaat bestellen. Ik geef d'r een paar duizend euro per jaar uit, en dan zeuren ze niet als ik een keer een paar weerstandjes van bij mekaar een euro laat komen.
Golden Member
Op 14 oktober 2019 19:46:33 schreef rew:
Ja, dat doen ze. Wel is het eigenlijk de bedoeling dat je een bedrijf bent en "meer" gaat bestellen. Ik geef d'r een paar duizend euro per jaar uit, en dan zeuren ze niet als ik een keer een paar weerstandjes van bij mekaar een euro laat komen.
Ik heb me geregisteerd (heb een kvk- en BTW nummer) en zojuist een eerste bestelling geplaatst.
Ik keek er echt van op dat voor € 2,52 een bestelling zou worden geleverd zonder verzendkosten.
Dat maakt het inderdaad wel heel aantrekkelijk om niet bij 'Alie' te bestellen.
De levertijd is veel sneller en wellicht heb je nog beter spul ook.
Special Member
Ik heb het er wel eens over gehad met de rayonmanager toen die een keer langskwam.
Hij zei dat ze natuurlijk niks verdienen aan zo'n zending, maar zolang het niet te vaak gebeurt vinden ze dat niet zo erg.
Hij zei wel dat als zendingen van een paar euro heel vaak voorkomen (en nooit 'normale'), ze een 'goed gesprek' met de betreffende klant houden...
Golden Member
Op 14 oktober 2019 20:26:21 schreef Arco:
Ik heb het er wel eens over gehad met de rayonmanager toen die een keer langskwam.
Hij zei dat ze natuurlijk niks verdienen aan zo'n zending, maar zolang het niet te vaak gebeurt vinden ze dat niet zo erg.
Hij zei wel dat als zendingen van een paar euro heel vaak voorkomen (en nooit 'normale'), ze een 'goed gesprek' met de betreffende klant houden...
In ieder geval heb ik nu snel een PIC16F887. Gewoon uit nieuwsgierigheid of ik dat aan de praat krijg.
Ondertussen ben ik al begonnen de MikroBasic 'user manual' door te worstelen.
Op 14 oktober 2019 21:36:52 schreef Bavelt:
[...]
Ondertussen ben ik al begonnen de MikroBasic 'user manual' door te worstelen.
Dan worden jij en Arco beste maatjes
Nog een tip, als je experimenteert moet altijd een controller nemen met genoeg IO pinnen zodat je niet moet beginnen schipperen met die IO's
Een LCD vraagt 1 volledige port en daar komen nog andere inputs en outputs bij naarmate het programma vordert.
Ik gebruik altijd een 16F876a bij het starten en kan daarna nog altijd downsizen naargelang het programma.
Deze keer heb ik de pas via CO aangekochte 16F887 gebruikt omdat die nieuwer was voor de MSSP.
Een 16F182x zou ik bv nooit kopen als ik daar geen goede reden voor had, eerder een 16F88 of een 16F886.
Ik zeg niet dat een 16F182x niet goed is hé, verre van maar in de hobbywereld weinig gebruikt.
Een hobbyist moet zich geen zorgen maken als die controller binnen 20j niet meer op de markt is, de courantste zullen 50j op de markt blijven en er is dan ook veel meer over te vinden.
Golden Member
Dan worden jij en Arco beste maatjes
Maar dat zijn wij ook, hoor! Je reageert ook altijd heel snel en accuraat.
Special Member
Op 15 oktober 2019 09:01:25 schreef Bavelt:
Maar dat zijn wij ook, hoor!
Voor diegenen die geinteresseerd zijn heb ik 4 lijntjes bijgeprogrammeerd die op de SQW outputpin een accurate 1Hz weergeeft.
Zo heb je altijd een 1Hz signaal bij de hand zonder verdere programmering en te gebruiken bij bv. freq.counters.
Die SQW pin is wel open collector( OC).
Golden Member
Ik heb nu ook de MiKroProg Suite geinstalleerd. Maar die kan de Pickit3 niet vinden als 'developer tool'.
Kan het kloppen dat die (nog steed) niet wordt ondersteund door MikroBasic?
Special Member
Processors als de 16F88 zijn nooit echt mainstream geweest (je ziet ze weinig) dus daar zou ik zeker niet aan beginnen.
(Hij kan ook veel minder, is trager, en kost het dubbele van de 1827...)
De 182x zie je veel in schakelingen, hoor. (hoewel er nu alweer nieuwere zijn die meer mogelijkheden hebben zoals de 1709 en 1769)
Een compromis zou een 28 pinner zijn (bij standaard schakelingen is een 40 pinner bijna altijd te veel)
Bij meer als 28 pin ga ik toch altijd voor een 24F pic vanwege de prijg/prestatieverhouding. (dil gebruik ik al lang niet meer behalve soms bij tests)
De 87x(a) is helemaal lastig, want die heeft geen interne oscillator.
Mikroprog is volgens mij alleen voor hun eigen programmer bedoeld. (ik gebruik altijd het losse Pickit programma)
Hun development boards hebben die programmer onboard, zodat je alleen maar een USB aansluiting hoeft te hebben...