adatrögzítés
adatrögzítés
Sziasztok!
Körbejártam a fórumot de nem találtam választ az általam keresett problémára.
Egy sd kártyára kellene mentenem hőmérséklet adatokat amiket egy atmega8 chip küld soros porton.
A kártyán úgy kellene eltárolni hogy egy txt állományban legyenek az adatok, amit bármikor egy pc-n tudjam kielemezni.
Milyen lehetőségeim vannak erre?
Hogyan tudok ilyen állományt létrehozni az sd kártyán?
Előre is köszi a válaszokat.
Kotesz
Körbejártam a fórumot de nem találtam választ az általam keresett problémára.
Egy sd kártyára kellene mentenem hőmérséklet adatokat amiket egy atmega8 chip küld soros porton.
A kártyán úgy kellene eltárolni hogy egy txt állományban legyenek az adatok, amit bármikor egy pc-n tudjam kielemezni.
Milyen lehetőségeim vannak erre?
Hogyan tudok ilyen állományt létrehozni az sd kártyán?
Előre is köszi a válaszokat.
Kotesz
Re: adatrögzítés
egy atmega8 ehez kicsi!
Esetleg:
SD kártya ISP módban fájl formátum nélkül
viewtopic.php?f=1&t=713&hilit=dos+sd
Esetleg:
SD kártya ISP módban fájl formátum nélkül
viewtopic.php?f=1&t=713&hilit=dos+sd
Re: adatrögzítés
Az sd kártyához nem atmega8- at gondoltam hanem egy atmega128A.
Az atmega8 csak az adatokat küldi amit sd kártyára kellene írni hogy pc-n is feldolgozható legyen.
Az atmega8 csak az adatokat küldi amit sd kártyára kellene írni hogy pc-n is feldolgozható legyen.
Re: adatrögzítés
AVR DOS segítségével könnyen lehet SD kártyára írni.
A program elején van:
$Include "Config_MMC.bas" 'include mmc
If Gbdriveerror <> 0 Then End
$Include "Config_AVR-DOS.BAS" 'include avr-dos
B = Initfilesystem(1) 'init file system
If B <> 0 Then Print "Errore MMC" ' error
A továbbiakban meg tudsz nyitni file-t írásra is:
Open Log_file_name For Append As #2
Print #2 , "Log data" ; Log_data
Close #2
Kicsit több mindenből is áll a program, de ebből már el tudsz indulni.
A program elején van:
$Include "Config_MMC.bas" 'include mmc
If Gbdriveerror <> 0 Then End
$Include "Config_AVR-DOS.BAS" 'include avr-dos
B = Initfilesystem(1) 'init file system
If B <> 0 Then Print "Errore MMC" ' error
A továbbiakban meg tudsz nyitni file-t írásra is:
Open Log_file_name For Append As #2
Print #2 , "Log data" ; Log_data
Close #2
Kicsit több mindenből is áll a program, de ebből már el tudsz indulni.
Re: adatrögzítés
Köszönöm mindenkinek, elindulok a avr-dos irányában.
Re: adatrögzítés
Üzleti célú alkalmazás esetén az AVR-DOS licenszdíjas!
Free: KokkeKat FAT kezelőprogramok.
Free: KokkeKat FAT kezelőprogramok.
Re: adatrögzítés
Nem üzleti célú hanem hobbi célú, de jó tudni.
Re: adatrögzítés
Megkerestem egy régebben Arduinora írt data loggeremet ami gps modulról 4800baud sebességgel érkező mondatokat menti kártyára, működik de élesben nem használtam, jobb az AVR DOS os.
Kód: Egész kijelölése
// SD data logger
// Arduino 1.0.1
#include <SD.h>
const int chipSelect = 4;
//The circuit:
// SD card attached to SPI bus as follows:
// MOSI - pin 11 on Arduino Uno/Duemilanove/Diecimila
// MISO - pin 12 on Arduino Uno/Duemilanove/Diecimila
// CLK - pin 13 on Arduino Uno/Duemilanove/Diecimila
// CS - depends on your SD card shield or module.
// in 4 used here for consistency with other Arduino examples
// pin 0 a GPS TX kivezetésére megy
// Az SD kártya 3,3V ról megy!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ellenben kijön a füst belőle
// A MOSI CLK CS bemeneteket egy soros 2kOhm ellenállással és párhuzamos 3,3kOhm
// ellenállással -mint feszültségosztó- kell illeszteni ha 5V os a rendszerünk
String inputString = ""; // a string to hold incoming data
byte I = 0;
byte BT = 0;
boolean stringComplete = false;
void setup() {
Serial.begin(4800); // itt kell beállítani hogy a GPS modul mekkora baud-dal megy.
// Nem teszteltem nagyobb sebességen!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
inputString.reserve(200);
delay(100);
Serial.print("Initializing SD card...");
pinMode(10, OUTPUT); //RECLED vilagít ha felvétel van vagy bekapcsoláskor ha nincs sd kártya. pin 10 csatlakozik + 330 Ohm ellenállás.
pinMode(9,INPUT_PULLUP); // REC button a felvétel elindításához meg kell nyomni. pin 9 csatlakozik
if (!SD.begin(chipSelect)) {
Serial.println("Card failed, or not present");
return;
}
Serial.println("card initialized.");
digitalWrite(10,HIGH);
delay(1500);
digitalWrite(10,LOW);
//Serial.print("$PSRF103,02,00,00,01*26");
//Serial.write(13);
//Serial.write(10);
//Serial.print("$PSRF103,03,00,00,01*27");
//Serial.write(13);
//Serial.write(10);
}
void loop() {
if (digitalRead(9) == HIGH && BT == 1) BT = 0;
if (digitalRead(9) == LOW && BT == 0) {
if (stringComplete = true) {
BT = 1;
I++;
if( I > 1) I = 0;
if( I == 0) digitalWrite(10,LOW);
if( I == 1) digitalWrite(10,HIGH);
}
}
if (stringComplete && I == 1) {
File dataFile = SD.open("datalog.log", FILE_WRITE);
if (dataFile) {
dataFile.println(inputString);
dataFile.close();
//Serial.println("OK");
}
else {
Serial.println("Error");
}
inputString = "";
stringComplete = false;
}
}
void serialEvent() {
while (Serial.available()) {
char inChar = (char)Serial.read();
inputString += inChar;
if (inChar == '\n') {
stringComplete = true;
}
}
}
Re: adatrögzítés
Trükk:
- AVRDOS: kiírás után flush #1-l a FAT-ot is frissítsd le,
- az egyidőben nyitott file-k száma: 1, ezt írdd át az AVR-DOS.bas-ban (minden file ~520 byte memfoglalást jelent),
- kiírás utá zárd le a file-t, ne maradjon nyitva. Open-write-fush-close,
- ha kiveszed a kártyát, egy gombbal jelezd! Csunya adatvesztes lehet kulonben,
- open file #2 for output -> felulirja,
- open file #2 for append -> hozzafuzi.
- AVRDOS: kiírás után flush #1-l a FAT-ot is frissítsd le,
- az egyidőben nyitott file-k száma: 1, ezt írdd át az AVR-DOS.bas-ban (minden file ~520 byte memfoglalást jelent),
- kiírás utá zárd le a file-t, ne maradjon nyitva. Open-write-fush-close,
- ha kiveszed a kártyát, egy gombbal jelezd! Csunya adatvesztes lehet kulonben,
- open file #2 for output -> felulirja,
- open file #2 for append -> hozzafuzi.