Sari la conținut
ELFORUM - Forumul electronistilor

Interfata Microcontroler Card SD


nnnnnn

Postări Recomandate

Buna ziua.

Dupa cum spune si titlul incerc sa programez un uC astfel incat sa comunice cu un card sd/microsd. Din ce-am citit pe internet am aflat urmatoarele:

cardul SD lucreaza cu tensiuni de 3.3V si trebuie realizata adaptarea de la 5V (de la uC) la 3.3V.

Ca sa fie mai simplu si mai rapid am ales sa folosesc urmatorul adaptor pentru arduino

http://www.okazii.ro/componente-electro ... a136412597

Intrebarea mea este daca exista deferente majore intre SD si microSD si daca e ok sa conectez printr-un adaptor un microSD la circuitul de mai sus.

-pe placuta nu ar mai fi trebuit sa fie o componenta activa? In imagine se vede doar un stabilizator cu condensatorii aferenti si 4 rezistente.

Link spre comentariu
  • Răspunsuri 18
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

  • nnnnnn

    8

  • mars01

    3

  • costi002

    2

  • Mihai Popa

    2

Top autori în acest subiect

Imagini postate

Salut!In genere diferenta intre sdcard si microsdcard tine de miniaturizare, tehnologie. Atata timp cat un microsdcard este citit/scris intr-un adaptor de catre un laptop, eu zic ca ai un raspuns clar.Pe shieldul respectiv ai un stabilizator de 3.3V care face posibila utilizarea unei U alimentare de 5V. Rezistentele respective formeaza divizoare de tensiune care adapteaza semnalele SPI de la 5V la 3.3V. Vezi schema din atachment. Eu as pune si o mica rezistenta de cateva zeci de ohmi pe MISO, pt limitare curent.Ai in atachment toate informatiile de care ai nevoie inclusiv ceva exemple pt. Arduino pe care le poti translata foarte usor in C pt PIC.Daca ai indoieli poti sa folosesti un PIC low voltage sau cele din seriile noi care merg la 3.3V.LE: vezi ca sunt colegi de forum care vand in sectiunea Bazar->Vanzari, module sdcard shield.

Link spre comentariu

...cardul SD lucreaza cu tensiuni de 3.3V si trebuie realizata adaptarea de la 5V (de la uC) la 3.3V.

Nu neaparat, acum uC lucreaza si la 3.3V (chiar si mai jos lqa 1.8V).

...am ales sa folosesc urmatorul adaptor pentru arduino... daca exista deferente majore intre SD si microSD si daca e ok sa conectez printr-un adaptor un microSD la circuitul de mai sus.

Da, poti pune un adaptor pentru microSD. Totodata, la sub 2$ poti cumpara un soclu de microSD (de pe ebay sau alte site-uri de vand componente).Asa cum am zis mai sus, poti conecta direct uC la card (SD sau microSD). Cauta pe internet sau vezi aici o schema de conexiuni. http://www.elforum.info/viewtopic.php?f=11&t=156905UPDATE: colegul mars01 ti-a dat raspunsuri similare si inca plus!
Link spre comentariu

Multumesc pentru raspunsuri si pentru documentatia atasata.Totusi nu sunt lamurit cu schema din acel pdf (corespunzatoare circuitului atasat de mine) din ce vad eu acolo nu e un divizor rezistiv ci doar niste rezistente de pull-up cu alte cuvinte acel circuit nu poate fi folosit pe un uC care lucreaza la 5v.Pe internet am gasit o schema care pe langa acel stabilizator mai avea un CI 78HC4050 care facea conversia 5v-3.3v dar sunt mai greu de gasit gata facute .Eu mi-am propus sa scriu in cardul sd date provenite de la un adc.Puteti sa i-mi recomandati un uC , nu conteaza AVR sau PIC ,(cu PIC am lucrat mai mult timp dar merge si AVR)care sa lucreze la 3.3v si care sa poata fi folosit intr-un proiect de complexitatea celui propus de mine.Inca nu m-am decis pe cati biti o sa fie adc-ul dar valorile date de acesta trebuie sa fie destul de precise deci uC va trebui sa aibe destul de multi pini.Mutumesc!

Link spre comentariu

Da, ai dreptate, era cam tarziu aseara si nu am stat sa verific, doar am atasat arhiva luata de la chinez. Cred ca trebuie sa adaugi tu rezistentele pt divizor asa cum poti vedea in fisierul download.png din radacina arhivei.Din PDF poti vedea ca tensiunea la care se face pull-up este de 3.3V. Nu am acum un modul disponibil la care sa fac verificari (mi-am cumparat si eu, trebuie sa imi ajunga comanda in cateva saptamani) dar nu este prea greu sa modifici tu modulul, pana la urma sunt cateva rezistente ...Iti trimit un MP cu recomandare pt uC. Numarul de pini este necesar sa fie mare daca ai nevoie de multe I/O, nu pentru precizie mare de la ADC-ul controller-ului. Iar daca vrei sa folosesti un ADC extern, sunt destule care comunica pe SPI.

Link spre comentariu

Multumesc pentru recomandari , am observat ca este foarte usor de conceput un program pentru o astfel de aplicatie pentru arduino(uno) cu cateva linii de cod poti face ca uC sa memoreze date intr-un fisier text am gasit deja un arduino pe okazii si la 60lei m-i se pare acceptabil.As folosi PIC dar stiu sa folosesc doar MicroC si m-i se pare destul de complicat pt acest tip de aplicatie si nici pickit nu am si n-as vrea sa ma apuc acum sa fac unul.Ma gandesc sa imi cumpar un arduino sa fac aplicatia sa mearga pe arduino apoi sa refac circuitul folosind doar chipul atmega238 (aflat pe arduino uno).Ca adaptor ma gandesc sa fac varianta cu divizor rezistiv, sper sa gasesc rezistentele in varianta smd.Cred totusi ca daca o sa fac aplicatia asta sa mearga pe Atmega pana la urma tot PIC o sa folosesc nu stiu de ce imi plac mai mult chipurile lor.Ramane de vazut.Multumesc.

Link spre comentariu

O idee buna.

Si odata ce o sa iti cumperi un Arduino, vei putea sa programezi unele PIC-uri cu el.

 

http://forum.arduino.cc/index.php/topic,92929.0.html

https://sites.google.com/site/thehighsp ... ino-pic18f

 

Daca vrei o modalitate extrem de usoara pentru a programa PIC-uri (o folosesc si eu cand am un proiect urgent, fara pretentii) este sa folosesti programul Flowcode de la Matrix Multimedia. Are si o librarie (cum o numesc ei, componenta) pentru sdcard format FAT16.

Are free trial 30 zile (instalat intr-o masina virtuala se poate folosi chiar mai mult timp).

http://www.matrixmultimedia.com/flowcode.php

 

LE: Programator PIC32 cu Arduino:

https://code.google.com/p/ardupic32/

Link spre comentariu
  • 3 săptămâni mai târziu...

Salutare,

Sa nu mai deschid un nou topic, intreb si eu aici.

Am incercat sa fac si eu o legatura intre un 18f4520 si un sd card. Pana acum, am reusit sa resetez cardul, sa il initializez si sa scriu 512 byte in el incepand de la adresa oarecare. Din cate am inteles, nu se pot scrie decat cate 512 byte odata, si doar de la inceputul unui sector.

De exemplu, sa mergem pe ideea unui logger. Daca vreau sa adaug o valoare in SD card, ma vad nevoit sa citesc toti cei 512 byte, vad de unde incepe sa fie gol, sa adaug valoarea mea si apoi sa il scriu la loc.

Ce ma deranjeaza, este faptul ca nu stiu sa aloc 512 byte in memoria pic-ului, asta daca imi permite. Pana acum, am reusit doar 200 de byte, mai departe imi da eroare de genul

@Error - section '.udata_main.o' can not fit the section. Section '.udata_main.o' length=0x0000014b@

Acum nu imi dau seama daca nu are el suficienta memorie sau nu ii spun ce trebuie.

Eu incerc cu

unsigned char bufer [512]  ;
si nu imi merge.

Mai adaug factul ca rutinele de scriere/citire SPI sunt facute de mine, nu reusesc sa le folosesc pe cele de prin librarii

 

MUltumesc in avans.

Link spre comentariu

Salutare,Sa nu mai deschid un nou topic, intreb si eu aici.Am incercat sa fac si eu o legatura intre un 18f4520 si un sd card. Pana acum, am reusit sa resetez cardul, sa il initializez si sa scriu 512 byte in el incepand de la adresa oarecare. Din cate am inteles, nu se pot scrie decat cate 512 byte odata, si doar de la inceputul unui sector. De exemplu, sa mergem pe ideea unui logger. Daca vreau sa adaug o valoare in SD card, ma vad nevoit sa citesc toti cei 512 byte, vad de unde incepe sa fie gol, sa adaug valoarea mea si apoi sa il scriu la loc.Ce ma deranjeaza, este faptul ca nu stiu sa aloc 512 byte in memoria pic-ului, asta daca imi permite. Pana acum, am reusit doar 200 de byte, mai departe imi da eroare de genul @Error - section '.udata_main.o' can not fit the section. Section '.udata_main.o' length=0x0000014b@Acum nu imi dau seama daca nu are el suficienta memorie sau nu ii spun ce trebuie.Eu incerc cu

unsigned char bufer [512]  ;
si nu imi merge.Mai adaug factul ca rutinele de scriere/citire SPI sunt facute de mine, nu reusesc sa le folosesc pe cele de prin librariiMUltumesc in avans.
Memorie are suficienta un 18f4520. Problema este linker este obligat de utilizeze bank-uri de 0xff bytes. (la tine zice ca ai depasit, ai 0x14b)Trebuie sa modifici in liker-script . Cauta fisierul 18f452.lkr ,fa o copie la tine in director de lucru, adauga-l la project in sectiunea "linkerscript", si apoi modifica: comaseaza doua,trei DATABANK intr-unul singur... Eu asa am facut. Te las sa intelegi singur. Dar nu reusesti, mai vorbim.Nu stiu alta modalitate.
Link spre comentariu
  • 3 săptămâni mai târziu...

Buna ziua!Am reusit sa fac legatura micro SD microcontroler (Arduino uno) si folosind ADC-ul pe 10 biti al uC am esantionat si memorat un semnal de 10Hz, rezultatul se vede in imagine plotat in excel.Codul scris de mine la fiecare conversie analog digitala executa o scriere pe SD , si cred ca se scriu nu doar cei 10 biti ai conversiei ci 512 biti (cum a spus si user-ul de mai sus) iar acest lucru , dupa parerea mea , reduce frecventa de esantionare.Pe situl celor de la arduino scrie ca Arduino uno foloseste un ADC cu Fe=10 Ksps adica pt un semnal 1Hz am 10 000 de esantioane iar pt 10 Hz (semnalul folosit de mine) 1000 de esantioane (intr-o perioada).Pe imagine se vede clar ca nu am 1000 de esantioane ci 7 daca am inumarat eu corect.M-am gandit sa folosesc un buffer care sa memoreze 512 biti iar apoi sa execute scrierea , arduino utilizeaza functia write(buffer , dimensiume).Problema este urmatoarea , buffer trebuie sa fie de tip byte sau char ambele de 8 biti iar ADC-ul livreaza rezultate pe 10 (doua registre unul pe 8 altul pe 2 biti).Intrebarea mea este cum sa fac sa separ cei doi registri , adica sa-l folosesc doar pe cel de 8 biti MSB ai conversiei ma refer ca sintaxa (cod efectiv pentru arduino).Pe viitor as vrea sa inlocuiesc ADC-ul intern cu unul extern m-am gandit ca unul pe minim 16 biti cu Fe de ordinul 1000 ar fi suficient.Am gasit ADC-uri care sa se incadreze in specificatii (de la Texas Instruments) dar necesita protectie ESD si nu stiu exact cum sa procedez deuarece nu am cum sa realizez circuitul sau sa-l testez fara sa ii ating pinii.Astept recomandari pe acesta tema.Multumesc!

post-24055-13982972831_thumb.jpg

Link spre comentariu

In mediul casnic riscurile de ESD sunt mult mai reduse decat in mediu industrial. Totusi, daca vrei sa te protejezi impotriva incarcarilor determinate de haine, mochete, etc din plastic te legi pur si simplu "la masa" - o bratara conductiva inseriata cu o rezistenta de sute de kΩ - MΩ legate la pamant.PS - TOATE dispozitivele semiconductoare sunt mai mult sau mai putin sensibile la ESD.In rest, sper sa te ajute colegii.

Link spre comentariu
  • 2 săptămâni mai târziu...
Vizitator iulianvalentin

@nnnnADC uri au destule si cei de la Microchip de la 8 la 22 biti cu o rata de esantionare diferita fireste, eu am comandat cativa de la TME si trebuie sa vina dupa 10 ianuarie. Eu pentru grafice am folosit de la arduino portul serial si un mic program facut in VS2010 ce arata cam asa, este incomplet dar indata ce ma decid il terminpost-17413-139829733342_thumb.jpg

Link spre comentariu
  • 2 luni mai târziu...

Buna seara!Am reusit sa avansez cu proiectul meu si am cateva nelamuriri.Am folosit ca adc un ADS7817 l-am legat la placuta arduino uno si am reusit sa afisez rezultatele conversiilor AD pe Serial monitor.Datele trebuie memorate pe cardul sd pe care l-am legat conform schemei.(schema este orientativa nu am tinut cont de ordinea pinilor pentru cardul SD)Am scris un cod iar la compilare imi arata ca SD-ul este conectat dar ADC-ul transmite numai 4095 (valoarea maxima, ADC-ul fiind pe 12 biti).In cod am instructiunea SD.begin(chip_select) care initializeaza conexiunea cu SD-ul (sau asa ceva) daca las circuitul asa cum e (cu SD-ul conectat) si sterg acea instructiunea SD.begin... montajul functioneaza iar datele transmise variaza si sunt afisate pe serial monitor iar totul e ok.Multumesc!

post-24055-139829774847_thumb.jpg

Link spre comentariu

Nu stie nimeni ce efecte are acea functie asupra SD-ului?Initial m-am gandit ca atunci ca pinul de Chip Select (CS) al SD-ului este HIGH pinul MISO (pe care uC face citirea de la ADC si de la SD - acesta fiind comun) ar fi tinut tot HIGH (de catre circuitul intern al SD-ului) astfel uC nu ar mai citi valoarea data de ADC ci doar 1111... adica 4095 pe 12 biti.Ca sa rezolv aceasta problema m-am gandit sa introduc in circuit acele porti tristate (active LOW) , atunci cand un CS este LOW(deci circuitul corespunzator este selectat) se realizeaza legatura intre iesirea circuitului selectat si uC (pinul MISO) cealalta legatura fiind in HighZ(practic deconectata de la circuit).Am pus totul in practica si acelasi rezulat.Problema pare a fi din program ceva in legatura cu acel SD.begin, dar fara ea nu pot sa scriu datele pe SD...O solultie ar fi sa controlez alimentarea SD-ului printr-un pin al uC astfel SD -ul sa nu fie alimentat atunci cand ADC-ul face conversii si alimentat doar atunci cand scriu pe el dar banuiesc ca in felul acesta reduc mult viteza de functionare si e si putin anormal sa procedez asa din moment ce exista pini de CS.Nu cred ca n-a mai legat nimeni de pe acest forum un ADC si un SD pe acelasi SPI.Multumesc.

Link spre comentariu

Creează un cont sau autentifică-te pentru a adăuga comentariu

Trebuie să fi un membru pentru a putea lăsa un comentariu.

Creează un cont

Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!

Înregistrează un nou cont

Autentificare

Ai deja un cont? Autentifică-te aici.

Autentifică-te acum



×
×
  • Creează nouă...

Informații Importante

Am plasat cookie-uri pe dispozitivul tău pentru a îmbunătății navigarea pe acest site. Poți modifica setările cookie, altfel considerăm că ești de acord să continui.Termeni de Utilizare si Ghidări