Hallo CO,
Heb zitten stoeien met de PIC16F628a en de Openlog van Sparkfun. Had het eerst op 20MHz draaien op 5V. Maar aangezien de Openlog zijn Txd 3,3V is. Heb ik de PIC aangesloten op een 3V. Met de interne OSC op 4MHZ.
De 4Mhz heb ik gedaan, omdat ik de ProtonLite versie nog heb. Deze ondersteund alleen nog de 4 of 20Mhz. En aangezien bij 3V de PIC maar tot 10Mhz ondersteund. Moest ik even wat voor de test.
Ben bezig met het verkrijgen van een vervanger voor de ProtonLite, maar Proton+ is niet verkrijgbaar in NL. En van Crownhill kost het best veel. Maar dat is voor een ander topic denk ik.
Het schrijven naar de OpenLog is geen probleem meer. Maar zou graag willen weten of er wel een SDkaart in zit. En wat dan dus de status is van de OpenLog. Volgens Sparkfun zou er <12 uit moeten komen, zodra deze paraat is.
Heb nu een LCD scherm aangesloten zodat ik een soort debug scherm heb. Maar wat ik daar nu zie snap ik helemaal niks van. Ik krijg dus bij het opstarten de waardes te zien: 15410 -> 15998 -> 6682 -> 6682 -> (enz 6682)
Als ik dit opzoek in een ACSII tabel, dan is niks logisch. Dus ik doe iets verkeerds, maar wat? Dit is dus met zowel de externe 20Mhz(op 5V) als ook de interne 4Mhz (3V).
Hieronder mijn (slordige) test code.
pic basic code:
'****************************************************************
'* Name : UNTITLED.BAS *
'* Author : Jurriaan de Veld *
'* Notice : Copyright (c) 2018 JuCoDi *
'* : All Rights Reserved *
'* Date : 15-2-2018 *
'* Version : 1.0 *
'* Notes : *
'* : *
'****************************************************************
; PIC16F628A: +---v---+
; LED aansturing A.2<>[1 18]<>A.1 vrije poort
; vrije poort A.3<>[2 17]<>A.0 vrije poort
; [3 16]< kristal 20MHz
; [4 15]< kristal 20MHz
; GND [5 14] +5V (0f 3V3)
; LCD EN [6 13] LCD DB7
; USART RX >[7 12] LCD DB6
; USART TX <[8 11] LCD DB5
; LCD RS [9 10] LCD DB4
; +-------+
; KRISTAL INFO: PICBASIC CURSUS DEEL 3
; LCD INFO: PICBASIC Cursus Deel 4
DEVICE 16F628A ;Gebruik een 16F628A
;CONFIG HS_OSC, WDT_OFF, PWRTE_ON, LVP_OFF, MCLRE_OFF ;Gebruik Externe Kristal
CONFIG INTRC_OSC_NOCLKOUT, WDT_OFF, PWRTE_ON, LVP_OFF, BODEN_OFF, MCLRE_OFF ;Gebruik Interne Kristal
ALL_DIGITAL TRUE ;Alle ingangen digitaal maken
;XTAL = 20 ;Kristal van 20MHz
'LCD aansluitngen verplaatsen
DECLARE LCD_ENPIN = PORTB.0 ;De ENable aansluiting
DECLARE LCD_RSPIN = PORTB.3 ;De RS aansluiting
; WAARDES MET INTERNE 4MHZ
RCSTA = $90 ' Enable serial port & continuous receive
TXSTA = $24 ' Enable transmit, BRGH = 1
SPBRG = 25 ' 9600 Baud @ 4MHz, 0,16%
DECLARE HSER_RCSTA 90h ' Enable serial port & continuous receive
DECLARE HSER_TXSTA 24h ' Enable transmit, BRGH = 1
DECLARE HSER_SPBRG 25 ' 9600 Baud @ 4MHz, 0,16%
DECLARE HSER_CLROERR 1 ' Clear overflow automatically
; WAARDES MET 20MHZ
;KOPIE VAN USART CALC MISTER E
;RCSTA = $90 ' Enable serial port & continuous receive
;TXSTA = $24 ' Enable transmit, BRGH = 1
;SPBRG = 129 ' 9600 Baud @ 20MHz, 0,16%
;DEFINE HSER_RCSTA 90h ' Enable serial port & continuous receive
;DEFINE HSER_TXSTA 24h ' Enable transmit, BRGH = 1
;DEFINE HSER_SPBRG 129 ' 9600 Baud @ 20MHz, 0,16%
HSERIAL_CLEAR = ON
;EINDE KOPIE
;VARIABELE
DIM teller AS Byte
DIM inData as word
;Het geheugen leeg maken
CLEAR
; 76543210
'PORTA = %00000001 ;PIC opstarten met alle PORTA poorten laag
'PORTA = %00000000 ;PIC opstarten met alle PORTB poorten laag
TRISA = %11111001 ;Maak POTRA.1 uitgang voor LED aansturing
TRISB = %11111111
;Start Hoofdprogramma
PORTA.2 = 1
CLS
PRINT at 1, 1, "SD Kaart wordt", at 2, 1, "opgestart."
DELAYMS 1500 ;SD kaart opstarttijd gunnen
'PORTA.2 = 0
'Get data from TX
cls
repeat
'print "DATA:"
HSerin 0, verder, [indata] 'HSERIN (niet wachten), (naar SUB), (Gegevens)
print "DATA1:", dec inData, " " '[DEC] GEEFt 29253 als error later ook 28530
' 15410 -> 15998 -> 6682 -> 6682 -> enz..
verder:
DELAYMS 2000
toggle PORTA.2
HSEROUT [26]
HSEROUT [26]
HSEROUT [26]
until inData = 1111 'Na Programmeren 111001 000101 = 36 53
'Nieuwe Spanning Zonder SD 111001001000101 = 29253
if inData = 0 then
teller = 0
REPEAT
'PORTA.2 = 0
HSEROUT [dec teller ,44, "Datum: 25-02-2018"] ;44 = ,
' DELAYMS 15
'hserout [13,10] ;ENTER(13=CR gevolgd door 10=LF) -> CARRIAGE RETURN
INC teller ;teller met 1 verhogen
DELAYMS 1000
CLS
PRINT at 1, 1, "Writing..."
UNTIL teller = 3 ;Stoppen als waarde is behaald
elseif inDATA = 29253 then
cls
print "SD Error"
delayms 2000
endif
PORTA.2 = 1
END ;END the program