PIC Microcontroller met SD Kaart


Als je voor lange tijd af en toe een gebeurtenis wilt loggen is het een beetje zonder om daar altijd een volledige PC voor te laten draaien, en daarbij is dat niet altijd mogelijk, bijvoorbeeld als je het op een accu moet doen of zo.

Een manager is iemand die denkt dat negen vrouwen in één maand een kind kunnen maken

Op 29 januari 2018 12:17:42 schreef hadv:
Er is een SD library voor gebruik met PicBasic, kijk maar op de website. Nadeel van de meeste wat oudere libraries is dat die alleen kleine sd kaarten (2GB) ondersteunen.

Dat is best uitgebreid inderdaad. Dat ik die niet eerder heb gevonden.

Het Arduino spul heb ik dan inderdaad verkeerd begrepen. Dat het kleiner kon worden opgebouwd dat wist ik niet. Is zeker interessant om daar dan ook in te duiken.

Een PC wordt hem inderdaad niet. Ga niet voor zoiets simpels een complete PC neerzetten. Maar toch bedankt voor het meedenken. Sta altijd open voor ideeën.

Op 29 januari 2018 12:14:49 schreef Arco:
Hoeveel RAM je nodig hebt hangt af van de hoeveelheid data die je wilt lezen en schrijven in een keer.
Als je FAT gebruikt, moet je de file eerst openen voordat je kunt lezen en schrijven. Als je de kaart 'raw' gebruikt hoeft dat niet.

Maar met RAW kan ik hem niet uitlezen op de PC toch? Dan moet hij echt FAT zijn toch?

Verder zie ik nog wat modules voorbij komen. Ga daar ook eens voor kijken, hoe simpeler om te beginnen hoe beter. Moeilijker kan het altijd nog :D

Raw kun je wel op de PC uitlezen, maar dan moet je de PC software ook zelf maken... ;)

Arco - "Simplicity is a prerequisite for reliability" - www.arcovox.com

Of je mount het ding gewoon raw met Linux, schrijft de inhoud met dd naar een file en opent die vervolgens normaal. Met Windows zijn er ook wel tools te vinden die iets dergelijks kunnen; je kunt immers ook een image maken van een schijf waarvan Windows het file system niet kan lezen.

Als alternatief kun je de microcontroller ook de kaart terug laten lezen en de inhoud dumpen via een (al dan niet virtuele) seriële poort of zo.

Een manager is iemand die denkt dat negen vrouwen in één maand een kind kunnen maken
Lambiek

Special Member

Op 29 januari 2018 16:56:48 schreef Arco:
Dan nog heb je een SD card (of een andere vorm van geheugen) nodig... ;)

Waarom?, het staat al op de PC.

Op 29 januari 2018 19:15:00 schreef SparkyGSX:
Als je voor lange tijd af en toe een gebeurtenis wilt loggen is het een beetje zonde om daar altijd een volledige PC voor te laten draaien, en daarbij is dat niet altijd mogelijk, bijvoorbeeld als je het op een accu moet doen of zo.

Kan prima, heb dat al vaker gedaan. Daar zijn hele leuke oplossingen voor, en die werken gewoon op 12VDC. Maar of het iets voor de TS is weet ik niet.

http://www.fit-pc.com/web/products/fit-pc2/

Als je haar maar goed zit, GROETEN LAMBIEK.

Op 30 januari 2018 09:13:32 schreef Lambiek:
Kan prima, heb dat al vaker gedaan. Daar zijn hele leuke oplossingen voor, en die werken gewoon op 12VDC. Maar of het iets voor de TS is weet ik niet.

http://www.fit-pc.com/web/products/fit-pc2/

Voor 300-400 euro, PLUS verzendkosten, BTW en invoerrechten? Voor iets wat je prima met een microcontroller kunt doen, voor hooguit 20 euro?

Daarbij is het ding "extreem zuinig" met een verbruik van 5W (in idle). Als je microcontroller meer dan 1/1000ste daarvan verbruikt terwijl hij staat te wachten, heb je iets fout gedaan.

Als je nou HD camerabeelden moet verwerken is het wat anders, maar om sporadische events op een digitale ingang te loggen vind ik zo'n PC echt belachelijk.

Toegegeven, als je nog moet leren hoe je zoiets maakt, je dat veel sneller kunt ontwikkelen met een PC omdat je dat al wel kunt, en de uren tegen een normaal tarief betaald moeten worden, kan het een economisch haalbare oplossing zijn, maar de TS zegt toch duidelijk dat het voor de hobby is.

[Bericht gewijzigd door SparkyGSX op 30 januari 2018 09:42:40 (16%)]

Een manager is iemand die denkt dat negen vrouwen in één maand een kind kunnen maken

@lambiek: Het is schijnbaar niet de bedoeling dat de PC hiervoor 24/7 aan blijft staan. Lijkt me ook nogal een verspilling voor zo'n klusje... ;)
Dus heb je geheugen nodig om te bufferen. (je kunt natuurlijk ook een pic met meer geheugen nemen. Ze zijn er met 1Mb flash/32kb ram)

Arco - "Simplicity is a prerequisite for reliability" - www.arcovox.com
Lambiek

Special Member

Op 30 januari 2018 09:41:07 schreef SparkyGSX:
Voor 300-400 euro, PLUS verzendkosten, BTW en invoerrechten?

Er zijn ook goedkopere.

Voor iets wat je prima met een microcontroller kunt doen, voor hooguit 20 euro?

Ik zeg ook niet dat de TS het zo moet doen, het was maar een suggestie hé.

Als je nou HD camerabeelden moet verwerken is het wat anders, maar om sporadische events op een digitale ingang te loggen vind ik zo'n PC echt belachelijk.

De TS zegt ook niet wat voor signaal het is, en het blijft niet bij één signaal zegt hij. In de toekomst moeten het er meer worden.

Op 30 januari 2018 09:50:28 schreef Arco:
Het is schijnbaar niet de bedoeling dat de PC hiervoor 24/7 aan blijft staan. Lijkt me ook nogal een verspilling voor zo'n klusje... ;)

Die 12VDC pc's zijn goedkoop in gebruik.

Dus heb je geheugen nodig om te bufferen. (je kunt natuurlijk ook een pic met meer geheugen nemen. Ze zijn er met 1Mb flash/32kb ram)

Snap ik allemaal, maar goed ik houd mijn mond wel. :)

Als je haar maar goed zit, GROETEN LAMBIEK.

Er zijn best plaatsen waar zo'n PC een handige oplossing is hoor, datalogging bij testopstellingen en zo, voor professionele toepassingen, als in, de uren moeten betaald worden. Aangezien de TS een Basic Stamp ook te duur vond (geheel terecht overigens, 80+ euro slaat nergens op), gaat dit het ook niet worden, denk ik.

@TS: afhankelijk van het aantal timestamps dat je wilt kunnen opslaan, en het formaat van de microcontroller die je gebruikt, zou je ze ook naar het interne flash kunnen schrijven. Een datum en tijd, met een resolutie van een seconde, kun je in 4 bytes passen. Als het moet kan het zelfs in 2 bytes, als je een resolutie van één minuut en een maximale interval van 45 dagen acceptabel vindt. Er zijn microcontroller van 128, 256 of zelfs 512kB, waarvan je maar een klein deel nodig hebt voor programmacode, en de rest dus kunt gebruiken om data op te slaan. Nog een ander alternatief, met AVR/PIC microcontrollers en dergelijke, is in het interne EEPROM. Veel moderne controllers (STM32 e.d.) hebben geen interne EEPROM meer, dus dan zul je het in flash moeten schrijven, of extern opslaan.

Opties genoeg! Bedenk eerst hoeveel timestamps je wilt kunnen opslaan, wat de resolutie moet zijn, en hoeveel tijd je erin wilt steken.

Een manager is iemand die denkt dat negen vrouwen in één maand een kind kunnen maken

Nu we toch bezig zijn met over-engineered oplossingen:
Quadcore processor op 1200MHz, 256MB geheugen, wireless netwerk, 10/100Mbit bedraad netwerk en 480Mbit USB. En oh ja: een micro SD kaart slot. Dit alles voor onder de 13 euro.

Orange Pi.

1 electron per seconde = 16 atto ampere!

Wij hebben zo'n soort loggertjes gemaakt. Gewoon ontwikkeld op een uno. En daarna alleen de de losse atmel chip in smd uitvoering op een printje gekwakt.

Het is een loggertje dat vier spanningen logt. Er zitten vier losse ad converters, een realtime klokje met zo'n knoop batterijtje en sd kaartinterface op.

Het hele spul draait een week op een lipo batterijtje.

Het ding zit permanent in de installatie. 1 keer in de week wordt de sd kaart en de batterij vervangen. Als de installatie hard moet werken gaat de log frequentie omhoog. Als alles in rust is is de log frequentie laag en valt de cpu steeds in slaap om energie te sparen.

Het is mogelijk om dit met elk cpu platform te maken. Of je nu een Z80 of een HC11 of een microchippert (Tegenwoordig ook atmel hoorde ik?) gebruikt maakt niet uit. Twee belangrijke punten. Maakt het uit hoeveel energie je gebruikt? Zo ja dan moet je kijken de cpu diepslaap mogelijkheden heeft. En hoe groot is de log frequentie. Hoge frequentie geeft veel data. Veel data kost tijd en energie om te schrijven en lezen. De SPI bus kan standaard ook geen lange afstanden overbruggen. Je sd kaartje moet dicht bij de cpu zitten.

Heb je energie zat? dan kun je overwegen om met een usb stick te gaan werken. Een stuk makkelijker en minder kwetsbaar dan een SD kaartje. Zeker als het zo'n heel kleintje is.

Hoe ga je de timestamp maken? De CPU zelf laten tellen. Dan ben je altijd de tijd kwijt als de cpu wordt gereset of uit gaat.

Het arduino platform vind ik verreweg het makkelijkst werken omdat de software ongeveer al klaar is. Voor de pic cpu's heb ik ook alles om iets mee te maken. En dat heb ik wel gedaan ook. maar de Arduino's spannen echt de kroon wat simpelheid betreft. En wat wat kosten betreft. Zo'n uno kost echt niets en het is een kwestie steker er in en het werkt.

[Bericht gewijzigd door Ex-fietser op 1 februari 2018 20:01:14 (11%)]

Bedankt allemaal voor de info.
Heb het alleen even te druk gehad om er goed in te duiken.

De arduino is opzich nog wel een optie voor mij. Maar wil het eerst even goed hebben uitgezocht voor ik op aanschaf over ga.

Nu kwam ik ook nog de openlog van sparkfun tegen.
https://learn.sparkfun.com/tutorials/openlog-hookup-guide
Deze snapt seriele verbindingen. Maar als ik deze op me pic16f628a wilt aansluiten. Waar sluit ik dan de GRN port van de OpenLog op aan? Is dat een vss of een clockpuls?

Staat in de omschrijving, komt aan de DTR. (waarom 'ie GRN heet mag joost weten...)

Arco - "Simplicity is a prerequisite for reliability" - www.arcovox.com

Ben toch gegaan voor de OpenLog van Sparkfun.

Deze is aan te sturen via serieel. Maar nu staat er in de handleiding dat de RXI en RXO van deze module 3.3V is.

Heb ik het nu goed begrepen, dat de PIC16f628a 5V op TXO uitstuurt?
En dat ik dus een max232 er tussen moet zetten???

Voordat de rook ontsnapt, en hij het niet meer doet.

Is de eerste keer serieel voor mij. Maar heb wat info gevonden over de uart, dus wil eerst testen voordat ik verdere vragen ga stellen.

Nee, de MAX232 maakt er +/-12v van, rook krijg je dan zeker.
Gewoon de 16F628a op 3.3v laten draaien (max. is dan wel 10MHz)

Arco - "Simplicity is a prerequisite for reliability" - www.arcovox.com

Bedankt Arco voor de snelle reactie.

Wel weer jammer heb namelijk geen 10MHz kristal liggen.
En gebruik ook nog de basic IDE versie, wat volgens de picbasic.nl alleen maar 4 en 20MHz kristallen ondersteund.

Dan zou ik een 4MHz kristal moeten nemen. Om dan de Baudrate van 9600 te halen. Moet ik dan de SPBRG op 25 zetten? en de BRGH=1

Of kan dit anders met de huidige 20MHz kristal? (alles is dan eigenlijk de halve tijd, maar hoe stel ik de waardes dan in)
Niet helemaal netjes, maar als het werkt.

(berekening uit de USART Calc van mister E
DEFINE HSER_RCSTA 90h ' Enable serial port & continuous receive
DEFINE HSER_TXSTA 24h ' Enable transmit, BRGH = 1
DEFINE HSER_SPBRG 25 ' 9600 Baud @ 4MHz, 0,16%
DEFINE HSER_CLROERR 1 ' Clear overflow automatically

RCSTA = $90 ' Enable serial port & continuous receive
TXSTA = $24 ' Enable transmit, BRGH = 1
SPBRG = 25 ' 9600 Baud @ 4MHz, 0,16%

Dan zou ik een 4MHz kristal moeten nemen. Om dan de Baudrate van 9600 te halen. Moet ik dan de SPBRG op 25 zetten? en de BRGH=1

Klopt...

Of kan dit anders met de huidige 20MHz kristal? (alles is dan eigenlijk de halve tijd, maar hoe stel ik de waardes dan in)

Niet op 3.3v. (max 10MHz)

Arco - "Simplicity is a prerequisite for reliability" - www.arcovox.com
Lambiek

Special Member

Op 15 februari 2018 21:58:07 schreef Arco:
Nee, de MAX232 maakt er +/-12v van, rook krijg je dan zeker.

Waar heb je dat vandaan? Aan de ene kant "RX en TX" is de max232 gewoon TTL of CMOS compatible, en aan de kant van je PC "RX en TX" kan het variëren tussen de -6 en +6 volt, tot tussen de -12 en +12 volt.

Als je haar maar goed zit, GROETEN LAMBIEK.

@lambiek: TS wil 'm gebruiken als level shifter tussen 3.3 en 5v. Daar is 'ie niet geschikt voor...

Arco - "Simplicity is a prerequisite for reliability" - www.arcovox.com
Lambiek

Special Member

Oké, dat gaat niet nee. Ik ging ervan uit dat het voor de com-poort was, maar hij wil met micro-SD communiceren natuurlijk.

Als je haar maar goed zit, GROETEN LAMBIEK.

@Arco nog bedankt. Heb het nu "werkend" met een voltage divider(2 weerstanden)

Maar... Ik kan nu schrijven naar de OpenLog. Maar wat me niet lukt is om een nieuwe regel te maken. Heb volgens mij alles al geprobeerd.

van de \r\n tot aan alleen de 13 en de 10,13 combi. Met of zonder DEC er voor. Ik doe iets verkeerd en zie iets over het hoofd, maar wat?

Heb hieronder de code, hopelijk geeft hij het goed weer.

pic basic code:


;                  PIC16F628A:                 +---v---+
;                             vrije poort A.2<>[1    18]<>A.1 LED aansturing
;                             vrije poort A.3<>[2    17]<>A.0 vrije poort 
;                                              [3    16]< kristal 20MHz
;                                              [4    15]< kristal 20MHz
;                                         GND  [5    14]  +5V
;                                              [6    13]      
;                                    USART RX >[7    12]       
;                                    USART TX <[8    11] 
;                                              [9    10]
;                                              +-------+
; KRISTAL INFO: PICBASIC CURSUS DEEL 3
;

DEVICE 16F628A                                              ;Gebruik een 16F628A
CONFIG HS_OSC, WDT_OFF, PWRTE_ON, LVP_OFF, MCLRE_OFF        ;Gebruik Externe Kristal
ALL_DIGITAL TRUE                                            ;Alle ingangen digitaal maken
XTAL = 20                                                   ;Kristal van 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

;Het geheugen leeg maken
CLEAR


;        76543210
PORTA = %00000001                                           ;PIC opstarten met alle PORTA poorten laag
TRISA = %11111001                                           ;Maak POTRA.1 uitgang voor LED aansturing



;Start Hoofdprogramma
PORTA.2 = 1
DELAYMS 1500    ;SD kaart opstarttijd gunnen
  PORTA.2 = 0
Delayms 1000  


REPEAT
  HSEROUT ["123\n\r"]  
  hserout [10,13]    ;ENTER(13 or \r) -> CARRIAGE RETURN                                
  INC teller 
  PORTA.2 = 0                                               ;teller met 1 verhogen
  DELAYMS 1000                                              
UNTIL teller = 3                                           ;Stoppen als waarde is behaald

  PORTA.2 = 1
END                                                         ;END the program

waarom gebruik je niet gewoon de declares van picbasic? zit je vrijwel altijd goed.

Just find out what you like and let it kill you

@hadv en waarom zou ik de declares moeten gebruiken? De verbinding werkt.

Sterker nog was weer eens veels te snel. Het .txt bestand openen in excel geeft dus wel de 'newline'. Kladblok waar windows het standaard mee opent. Ziet die dus niet. Stom natuurlijk.

Alleen moet ik het nu nog voor elkaar krijgen om een variabel mee te sturen.

Normaal geef je eerst een CR en dan een LF, jij doet 't verkeerd-om.
Notepad werkt echt wel, nog nooit problemen mee gehad.

Arco - "Simplicity is a prerequisite for reliability" - www.arcovox.com

Op 21 februari 2018 00:29:10 schreef Arco:
Normaal geef je eerst een CR en dan een LF, jij doet 't verkeerd-om.
Notepad werkt echt wel, nog nooit problemen mee gehad.

Ow dankje. Dan gaat ik dat nog even proberen.

UPDATE 21022018: [13,10] werkt inderdaad wel. Kladblok geeft het nu wel goed aan. Super bedankt

[Bericht gewijzigd door Darknight op 21 februari 2018 21:54:48 (16%)]