PIC16F1826 met HD44780 en PicBasic

Bavelt

Golden Member

Op 12 oktober 2019 00:42:17 schreef Arco:
Als er 0x3B uit komt, zul je dat er echt ook wel ingestopt hebben... ;)
(je hebt er waarschijnlijk 59 decimaal ingestopt)

Ik ben er al achter. De fout die ik maakte was om de waarde van het register te tonen Nadat die eerst door de Bcd2toDec was gegaan.
Ja, en dan klopt het natuurlijk niet.
Ik kan nu alle data-registers tonen. Weer een stapje verder!

Fouten zijn het bewijs dat je het probeert..
Bavelt

Golden Member

Gelukkig regende het vandaag. Zonder me schuldig te hoeven voelen dus de hele dag aan het uitproberen geslagen.
Ik heb het PicBAsic Programma tot een echt minimum gereduceerd.
Hij hoeft alleen de tijd weg te schrijven naar de DS3231.

Met een ander programma (via MikroBasic) lees ik de registers uit (in exact dezelfde hardware opstelling).

De constatering is dat onderstaand programmaatje niks wegschrijft.
in ieder geval niet de datumvelden.

pic basic code:

DEVICE = 16F1826                 
CONFIG1 FOSC_INTOSC, WDTE_OFF, PWRTE_ON, MCLRE_OFF, CP_ON, CPD_OFF, BOREN_OFF, CLKOUTEN_OFF, IESO_ON, FCMEN_ON
CONFIG2 WRT_OFF, PLLEN_OFF, STVREN_ON, BORV_19, LVP_OFF
DECLARE XTAL 32
ALL_DIGITAL true 
OSCCON                = %11110000	'Oscillator goed zetten voor 32Mhz 

ANSELB = 0                        'Alle output/digital
ANSELA = 0                       
TRISA  = 0                                    
TRISB  = 0                                    

CLEAR                             'Wis RAM geheugen

HBSTART                           'Schrijven RTC
HBUSOUT %11010000
HBUSOUT 0
HBUSOUT %00000001
HBUSOUT %00000010
HBUSOUT %00000100
HBUSOUT %00000011
HBUSOUT %00000101
HBUSOUT %00010011
HBUSOUT 0
HBSTOP

DELAYMS 100                                      
END 

Tips van harte welkom wat ik nu nog méér kan proberen...

Fouten zijn het bewijs dat je het probeert..

Mijn DS3231 is deze morgen toegekomen, toevallig samen met de personenbelasting en raar maar waar we krijgen terug :o

Wat een warboel de dag van vandaag, gekocht op Ebay, objectlocatie Nederland, winkel in China en verzonden vanuit Engeland, 9 dagen onderweg wat heel snel is.

Morgen zal ik dat eens proberen met Picbasic, je hoort nog van mij.

LDmicro user.
Arco

Special Member

Ik zie nergens dat de i2c clocksnelheid wordt ingessteld (staat die wel goed? mag 100/400kHz zijn)

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Bavelt

Golden Member

Standaard staat deze op 100Khz.
In de Manual staat:

Declare I2C_Slow_Bus On - Off or 1 – 0
Slows the bus speed when using an oscillator higher than 4MHz. The standard speed for the
I2C bus is 100KHz. Some devices use a higher bus speed of 400KHz. If you use an 8MHz or
higher oscillator, the bus speed may exceed the devices specs, which will result in intermittent
transactions, or in some cases, no transactions at all. Therefore, use this Declare if you are not
sure of the device's spec. The datasheet for the device used will inform you of its bus speed.

Ik heb even voor de zekerheid

pic basic code:

Declare I2C_Slow_Bus On 

opgenomen, omdat de oscillator op 32 Mhz werkt.

Maar helaas nog geen effect.

Fouten zijn het bewijs dat je het probeert..
Bavelt

Golden Member

Verder heb ik gelezen dat er de mogelijkheid bestaat om te controleren of de slave een 'ACK' terugstuurt.

De Manual:

Using the Busout command with only one value after it, sends a byte of data to the I2C bus,
and returns holding the Acknowledge reception. This acknowledge indicates whether the data
has been received by the slave device.
The Ack reception is returned in the PICmicro's Carry flag, which is STATUS.0, and also System
variable PP4.0. A value of zero indicates that the data was received correctly, while a one
indicates that the data was not received, or that the slave device has sent a NAck return. You
must read and understand the datasheet for the device being interfacing to, before the Ack return
can be used successfully. An code snippet is shown below: -
' Transmit a byte to a 24LC32 serial eeprom
Dim PP4 as Byte System ' Bring the system variable into the BASIC program
Bstart ' Send a Start condition
Busout %10100000 ' Target an eeprom, and send a Write command
Busout 0 ' Send the High Byte of the address
Busout 0 ' Send the Low Byte of the address
Busout "A" ' Send the value 65 to the bus
If PP4.0 = 1 Then Goto Not_Received ' Has Ack been received OK?
Bstop ' Send a Stop condition
DelayMs 10 ' Wait for the data to be entered into eeprom

Wanneer de waaarde van pp4.0 een '1' is, zou er geen ACK zijn gegeven.
Ik controleer dat met een ledje. Die gaat inderdaad aan.

Maar ik weet niet zeker of ik dat zo goed in het programma heb opgenomen of dat dat hier kan. Is met niet helemaal duidelijk.

pic basic code:

HBSTART                           'Schrijven RTC
HBUSOUT %11010000
HBUSOUT 0
HBUSOUT %00000001
HBUSOUT %00000010
HBUSOUT %00000100
HBUSOUT %00000011
HBUSOUT %00000101
HBUSOUT %00010011
IF pp4.0 = 1 THEN GOTO Fout
HBUSOUT 0
HBSTOP

DELAYMS 100 

GOTO Einde

Fout:

HIGH LEDA
GOTO Einde

Einde:
                                     

END  
Fouten zijn het bewijs dat je het probeert..
Bavelt

Golden Member

Morgen zal ik dat eens proberen met Picbasic, je hoort nog van mij.

Zou mooi zijn!

Fouten zijn het bewijs dat je het probeert..
Bavelt

Golden Member

De I2C bus van de DS3231 is 400 Khz lees ik in de datasheet.

Fouten zijn het bewijs dat je het probeert..

Fout gelezen? zie Blz4 ;)

Fastmode = 100 tot 400kHz
Slowmode = 0 tot 100kHz

LDmicro user.
Bavelt

Golden Member

Ik had hiernaar gekeken:

Benefits and Features
? Highly Accurate RTC Completely Manages All
Timekeeping Functions
• Real-Time Clock Counts Seconds, Minutes, Hours,
Date of the Month, Month, Day of the Week, and
Year, with Leap-Year Compensation Valid Up to 2100
• Accuracy ±2ppm from 0°C to +40°C
• Accuracy ±3.5ppm from -40°C to +85°C
• Digital Temp Sensor Output: ±3°C Accuracy
• Register for Aging Trim
• RST Output/Pushbutton Reset Debounce Input
• Two Time-of-Day Alarms
• Programmable Square-Wave Output Signal
? Simple Serial Interface Connects to Most
Microcontrollers
Fast (400kHz) I2C Interface

Fouten zijn het bewijs dat je het probeert..

Dat is een lijstje van wat die allemaal kan, de echte cijfers staan in de Electrical charateristics, dat is bij alle datasheets zo.

NB. de snelheid wordt bepaald door de controller, niet door de DS3231 maar je moet je wel aan zijn ratings houden.

[Bericht gewijzigd door MGP op zaterdag 12 oktober 2019 19:40:03 (31%)

LDmicro user.
Bavelt

Golden Member

Ik heb nog wat proefjes genomen, maar krijg die DS3231 niet aan de praat met PicBasic.

Fouten zijn het bewijs dat je het probeert..

Man, man man... heb een heel slechte namiddag pfff 8)7

Had een testprogramma gemaakt en gecompileerd voor die DS3231 op de pc.
Daarna de map gecopieerd naar mijn NAS en die map gecopieerd op mijn laptop in de hobbyplaats waar Protonbasic ook opstaat.

Programma werkte niet (no problem) dan wat aanpassingen gemaakt..gecompileerd en in de pic geladen, werkte nog niet.
Dan nog wat zitten lezen en programmeren, geen verbetering.

Tot ik na een uur of 2 doorhad dat Protonbasic de hexfile niet in de map zette van de source maar in zijn eigen PDS map en dus laadde ik telkens de 1ste foutieve hexfile in |:(

Ondertussen was ik al gedegradeerd naar knipperen van een ledje, naar een voorbeeld van picbasic.nl :(

En ook dat wil nog niet werken, de scoop triggert een keer of 2 en dan een vlakke lijn, waarschijnlijk een foute configuratie instelling maar ik ben ermee gestopt, morgen een andere dag.

Picbasic sucks...

Dat displayprogramma in dat ander topic heeft mij veel minder tijd gekost in LDmicro

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_ON, DEBUG_OFF
Config2 BOR4V_BOR40V, WRT_OFF

OSCCON = %11110000
Declare Xtal 8


All_Digital TRUE              ;Alle ingangen digitaal

Opnieuw:                      ;Label met zelf te verzinnen naam
Toggle PORTC.0                ;Aan moet uit, uit moet aan
DelayMS 500                   ;500 milliseconden = 0,5 seconde
GoTo Opnieuw                  ;Spring naar 'Opnieuw' en ga zo steeds door 

End                           ;Einde programma
 
LDmicro user.
Arco

Special Member

LVP op LVP_OFF uitzetten, en als je geen reset circuit hebt: MCLRE op MCLRE_OFF

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com

Er hangt een 22k weerstand aan de MCLR pin1 naar de +5V

LDmicro user.
Arco

Special Member

LVP moet wel uit (of je moet een pull-down weerstand aan de PGM pin zetten)

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com

Ok ga dat morgen eens proberen, vandaag heb ik er meer genoeg van ;)

edit: ondertussen er wat over opgezocht en je hebt gelijk, er zijn veel problemen hiermee en dat is minder met oudere pic's die ik het meest gebruik.

Een forum onderwerp hierover.

Nogmaals bedankt om dat te laten weten.

LDmicro user.
Arco

Special Member

Met oudere pics is het juist erger, die hebben allemaal een PGM pin die vaak vergeten wordt. Nieuwere hebben dat helemaal niet meer... ;)

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com

Ik heb er nochtans nooit problemen mee gehad (16F628a,88,876a,877a), die 16F887 is voor mij nieuw en ik heb al prijs.
Morgen de ledjes test ;)

LDmicro user.
Arco

Special Member

Die je opnoemt hebben toch ook echt allemaal een PGM pin.
Als je die gebruikt met LVP_ON en zonder pull-down aan de PGM pin kom je ook zwaar in de problemen...
(als de PGM pin zweeft en LVP is aan dan gaat de MCU bij de minste storing in de programmeermodus...)

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Lambiek

Special Member

Op 13 oktober 2019 17:33:36 schreef MGP:
Picbasic sucks...

Er is helemaal niets mis met picbasic, komt gewoon omdat je het niet gewend ben en omdat het nieuw voor je is.

Als je haar maar goed zit, GROETEN LAMBIEK.
Arco

Special Member

De documentatie is in ieder geval slecht.
Zoals eerder gezegd staat bij i2cin() en i2cout() niet eens of het soft of hardware is.
De weinig zeggende namen hbusin en hbusout voor hw i2c dragen ook al niet bij aan de duidelijkheid...

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Bavelt

Golden Member

Er is helemaal niets mis met picbasic, komt gewoon omdat je het niet gewend ben en omdat het nieuw voor je is.

Lambiek,
Jij kent PicBascic goed.

Zie jij misschien iets in dit programma waarom dit niet werkt?
Er wordt niets naar de RTC weggeschreven.

pic basic code:

DEVICE = 16F1826                 
CONFIG1 FOSC_INTOSC, WDTE_OFF, PWRTE_ON, MCLRE_OFF, CP_ON, CPD_OFF, BOREN_OFF, CLKOUTEN_OFF, IESO_ON, FCMEN_ON
CONFIG2 WRT_OFF, PLLEN_OFF, STVREN_ON, BORV_19, LVP_OFF
DECLARE XTAL 32
DECLARE I2C_SLOW_BUS OFF
ALL_DIGITAL true 
OSCCON                = %11110000	'Oscillator goed zetten voor 32Mhz 

ANSELB = 0                        'Alle output/digital
ANSELA = 0                       
TRISA  = 0                                    
TRISB  = 0 

CLEAR                             'Wis RAM geheugen

HBSTART                           'Schrijven RTC
HBUSOUT %11010000      
HBUSOUT 0
HBUSOUT %00000001
HBUSOUT %00000010
HBUSOUT %00000101
HBUSOUT %00000010
HBUSOUT %00000011
HBUSOUT %00000101
HBUSOUT %00000111
HBUSOUT 0
HBSTOP

DELAYMS 100 
Einde: 
Fouten zijn het bewijs dat je het probeert..

Op 13 oktober 2019 21:22:22 schreef Lambiek:
.... komt gewoon omdat je het niet gewend ben en omdat het nieuw voor je is.

Misschien wel ;) ...als je begint te sukkelen is het beter van het een tijdje te laten rusten, maar vandaag een nieuwe poging.

LDmicro user.
Lambiek

Special Member

Op 14 oktober 2019 00:13:26 schreef Bavelt:
Lambiek,
Jij kent PicBascic goed.

Zie jij misschien iets in dit programma waarom dit niet werkt?
Er wordt niets naar de RTC weggeschreven.

Ik had je al een keer een voorbeeld gegeven voor de DS1307.

Het hele programma staat hier.

https://www.circuitsonline.net/forum/view/85474/2

zelf gebruik ik dit.

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

Maar dat kan voor de DS3231 anders zijn, ik ken dat ding verder niet. De DS1307 werkt prima voor mij, loopt net geen minuut achter op een jaar.

Op 14 oktober 2019 08:13:17 schreef MGP:
Misschien wel ;) ...als je begint te sukkelen is het beter van het een tijdje te laten rusten, maar vandaag een nieuwe poging.

Als je een dag wacht, zie je soms ineens wat er fout gaat/ging. :)

Als je haar maar goed zit, GROETEN LAMBIEK.