Страница 1 из 1
Требуется помощь MMC/SD IK ATmega срочно
Добавлено: Сб июл 18, 2009 10:38:56
more
Добрый день глубоко Уважаемые КОТЫ!!!
Я новичек в программировании МК. Но мне для комнаты нужно сделать такую вещь: контролировать кто вошел в комнату и записывать в SD карточку время входа и выхода, а затем передовать по USART (по запросу).
Я очень много времени потратил на чтение различной информации, в том числе и на вашем ресурсе.
Разобрался с USART (передаю и принимаю данные), разобрался с ИК (ну не совсем до конца освоил передачу только "1" на частоте 36кгц), разобрался с микросхемой времени дс1307, с MMC (SD) карточкой (на 2 ГГб просто она есть от мобильника)посложнее записывал по секторам,но статистику по дням в ТХТ файлах хочу вести , что то не получается.. пытался использовать модуль: (
http://elm-chan.org/fsw/ff/00index_e.html)
Делал в коде визионе.
Идея такова:
На входе комнаты ставиться 2 ИК датчика, с одной стороны передатчик на TSAL5100 (2-3 шт. которые последовательно передают разный код на RC5) с другой стороны приемник на TSOP1736. Как человек проходит, сигнал прерывается и данные записываются в память(время прохода).
есть веб камера, с функцией фотографирования по клику, просто при срабатывании входа она будет фотографировать (просто импульс на реле включения).
Микроконтроллер АТмега16 с стандартной конфигурацией фьюзов на 1 МГгц, программатор внутресхемный.
Конкретно сам вопрос:
Пожалуйста помогите разобраться с FAT и записью по файлам, и передачи с приемом кода на RC5 по ИК с использованием Меги16 (я нашел примеры на тини, но не получается передалать, не работает:( _). Еще вопрос возникает с программатором и подключением карточки, они оба висят на линии SPI.
Я знаю, что вопросы эти поднимались не однократно, особенно про ИК, но либо я что то не понимаю, либо я ...
PS: прошу прощение что много написал, ну просто это моя последняя надежда
Добавлено: Сб июл 18, 2009 11:49:43
Spider
Эх, ты - Школьник!
Библеотеку ты выбрал правильную для FAT. А как с ней работать смотри делее. Сразу условимя, у тебя уже настроены и работают часы, и SD/MMC карта когда-то уже работала, чтобы исключить вопросы "а как считать время с rtc?"
Собственно мини пример, пишу его "на ходу" с синтаксисом WinAVR. Сильно не бейте если что не так:
Код: Выделить всё
#include <avr>
#include "ff.h"
#include "diskio.h"
#include "rtc.h"
FATFS Fatfs;
/* Это необходимый минимум для работы FF библиотеки.
* Эту функцию библиотека вызывает, когда пишет время
* изменения или создания файла. Ну в принципе всё просто
* Нужно вернуть время в формате FAT.
* Данный пример берёт время из RTC часов. Как я сказал выше,
* Условимся что они у тебя есть и работают
*/
DWORD get_fattime ()
{
RTC rtc;
/* Get local time */
rtc_gettime(&rtc);
/* Pack date and time into a DWORD variable */
return ((DWORD)(rtc.year - 1980) << 25)
| ((DWORD)rtc.month << 21)
| ((DWORD)rtc.mday << 16)
| ((DWORD)rtc.hour << 11)
| ((DWORD)rtc.min <<5>> 1);
}
/* Каждые 10 mSec должна вызываться эта функция.
* Это опять из необходимого минимума
*/
ISR(TIMER2_COMP_vect)
{
disk_timerproc();
}
int main(void) {
OCR2 = 0xE4; // Timer2: 100Hz interval (OC2)
TCCR2 = 0b00001101;
TIMSK = 0b10000000; // Разрешение прерывания TC2.oc
rtc_init(); // Инициализация RTC
sei();
f_mount(0, (FATFS *)fatfs);
DSTATUS ds=disk_initialize(0);
if (ds) {
if (ds & STA_NODISK) {
//[MMC] Not Inserted
} else {
//[MMC] Other error: ds
}
} else {
//MMC Готова к работе
volatile FIL dataFile;
if (f_open(&dataFile, "door.log", FA_OPEN_ALWAYS|FA_WRITE)!=FR_OK) {
//Ошибка открытия/создания файла
} else {
//Файл открыт, если его не было то создан и открыт.
f_lseek(&dataFile, dataFile.fsize); //Переходим к концу файла, чтобы его дополнять.
UINT writen;
uint8_t str[]="Пробная строка\r\n";
if (f_write(&dataFile,&str,strlen(str),&writen)!=FR_OK) {
//Ошибка записи
} else {
//Записалось writen байт
}
f_close(cfgFile); //закрываем файл по окончанию работы.
}
}
while(1); //Всё пример кончился
}
Вопросы?
Добавлено: Вс июл 19, 2009 00:56:44
BCluster
мм, а вам обязательно использовать сд карту? Подумайте, внутренней паняти проца хватит на тыщ пять проходов туда-сюда
Добавлено: Вс июл 19, 2009 01:35:19
more
Спасибюо большое Уважаемый
Spider, но мне как то больше и лучше под CodeVision, т.к. программы , модули я уже написал под все остальное. Но я попытаюсь разобраться.извеняюсь если что то резкое может быть в словах моих.. я новичек и мне проще и легче делать в коде визионе. Но я обязательно попытаюсь разобраться в Вашем коде!
мм, а вам обязательно использовать сд карту? Подумайте, внутренней паняти проца хватит на тыщ пять проходов туда-сюда
Ну в дальнейшем, я хочу записывать картинку с веб камеры (буду использовать другой модуль и другой МК, пока надо научиться работать с ФАТ выполняя простейшие действия)
Добавлено: Вс июл 19, 2009 17:42:31
pleshkov
more писал(а):Ну в дальнейшем, я хочу записывать картинку с веб камеры (буду использовать другой модуль и другой МК, пока надо научиться работать с ФАТ выполняя простейшие действия)
<offtopic>И тут остапа понесло ....</offtopic>
Может лучше для начала определиться с архитектурой, а потом уже лезть в дебри?
Добавлено: Вс июл 19, 2009 21:16:20
more
pleshkov писал(а):<offtopic>И тут остапа понесло ....</offtopic>
Может лучше для начала определиться с архитектурой, а потом уже лезть в дебри?
Ну в данном случае я и говорю, что мне надо ИК и ФАТ. просто писать в фаил на карточку.
а остальное это остальное..
Сегодня посидел с WinAVR, что то не получается... Лучше на кодевизионе.. пока экспререментирую:)
Добавлено: Вс июл 19, 2009 21:29:09
pleshkov
more писал(а):pleshkov писал(а):<offtopic>И тут остапа понесло ....</offtopic>
Может лучше для начала определиться с архитектурой, а потом уже лезть в дебри?
Ну в данном случае я и говорю, что мне надо ИК и ФАТ. просто писать в фаил на карточку.
а остальное это остальное..
Сегодня посидел с WinAVR, что то не получается... Лучше на кодевизионе.. пока экспререментирую:)
Если не горит, то завтра вечером смогу поделиться исходниками для winavr. Тоже логгер начинал делать. Пока забросил в связи с отпуском

Добавлено: Вт июл 21, 2009 11:14:52
more
pleshkov писал(а):Если не горит, то завтра вечером смогу поделиться исходниками для winavr. Тоже логгер начинал делать. Пока забросил в связи с отпуском

Было бы хорошо...
Код который дал Spide, что то ни как не могу откомпилировать в WinAVR, ошибки какието не понятные, мы с ним пробежались по коду.. исправили немного,но результатов не дало..
Пытался библиотеку эту в CodeVisione, все норм, но потом вставляю строчку f_mount(0, (FATFS *)fatfs); и выдает ошибку Undefined symbol: _f_mount
вот код
Код: Выделить всё
#include <mega16>
#include <diskio>
#include <ff>
// Declare your global variables here
FATFS fatfs;
void main(void)
{
.....
f_mount(0, (FATFS *)fatfs);
while (1)
{
// Place your code here
};
}
там в инклуде везде .h

Добавлено: Вт июл 21, 2009 11:17:06
Spider
ff.c нужно добавить в проект, чтобы линкер его прилинковал.
Добавлено: Вт июл 21, 2009 11:39:02
more
Spider писал(а):ff.c нужно добавить в проект, чтобы линкер его прилинковал.
Добавил в проект, основной код пустой (со всеми инклудами). Компилирую. все норм..
добовляю строчку f_mount(0, (FATFS *) & fatfs); и вот что компилятор выдает:
Compiling C: proba.c
avr-gcc -c -mmcu=atmega16 -I. -gstabs -DF_CPU=8000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=./proba.lst -std=gnu99 -MMD -MP -MF .dep/proba.o.d proba.c -o proba.o
Linking: proba.elf
avr-gcc -mmcu=atmega16 -I. -gstabs -DF_CPU=8000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=proba.o -std=gnu99 -MMD -MP -MF .dep/proba.elf.d proba.o --output proba.elf -Wl,-Map=proba.map,--cref -lm
proba.o: In function `main':
proba.c:16: undefined reference to `f_mount'
make: *** [proba.elf] Error 1
> Process Exit Code: 2
> Time Taken: 00:02
CodeVision так же ругается.
сейчас вот что в вин авр
Код: Выделить всё
#include <avr>
#include <ff>
#include <diskio>
#include <integer>
FATFS fatfs;
int main(void)
{
f_mount(0, (FATFS *)&fatfs);
while(1);
}
Добавлено: Вт июл 21, 2009 11:45:14
Spider
а где же?
Значит не добавил.
Добавлено: Вт июл 21, 2009 12:25:14
more
Вот прикрепляю весь свой проект для вин авра с мкфайлом.
Вроде все сделал как ты мне сказал
там вместе с библиотекой для фатс, но только без папочки options, весит много
Добавлено: Вт июл 21, 2009 12:29:06
Spider
всё правильно, теперь возьми mmc.c и пропиши его следом за ff.c и будет веселее.
Добавлено: Вт июл 21, 2009 12:58:23
more
Spider писал(а):всё правильно, теперь возьми mmc.c и пропиши его следом за ff.c и будет веселее.
Да, сделал... фаил сам mmc.c скачал с одной из веток, прикладываю.
но всеравно вот что выдало:
Код: Выделить всё
> "make" all
-------- begin --------
avr-gcc (WinAVR 20090313) 4.3.2
Copyright (C) 2008 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Compiling C: ff.c
avr-gcc -c -mmcu=atmega128 -I. -gstabs -DF_CPU=8000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=./ff.lst -std=gnu99 -MMD -MP -MF .dep/ff.o.d ff.c -o ff.o
Compiling C: mmc.c
avr-gcc -c -mmcu=atmega128 -I. -gstabs -DF_CPU=8000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=./mmc.lst -std=gnu99 -MMD -MP -MF .dep/mmc.o.d mmc.c -o mmc.o
mmc.c:7:1: warning: multi-line comment
mmc.c: In function 'spiTransferByte':
mmc.c:26: error: 'SPDR' undeclared (first use in this function)
mmc.c:26: error: (Each undeclared identifier is reported only once
mmc.c:26: error: for each function it appears in.)
mmc.c:27: error: 'SPSR' undeclared (first use in this function)
mmc.c: In function 'mmcReset':
mmc.c:117: error: 'PORTB' undeclared (first use in this function)
mmc.c:117: error: expected ';' before numeric constant
mmc.c:122: warning: implicit declaration of function 'delay_ms'
mmc.c:139: error: expected ';' before numeric constant
mmc.c:153: warning: implicit declaration of function 'printf'
mmc.c:153: warning: incompatible implicit declaration of built-in function 'printf'
mmc.c: In function 'mmcSendCommand':
mmc.c:184: error: 'PORTB' undeclared (first use in this function)
mmc.c:184: error: expected ';' before numeric constant
mmc.c:188: error: expected ';' before numeric constant
mmc.c: In function 'mmcRead':
mmc.c:199: error: 'PORTB' undeclared (first use in this function)
mmc.c:199: error: expected ';' before numeric constant
mmc.c:218: error: expected ';' before numeric constant
mmc.c: In function 'mmcCommand':
mmc.c:234: warning: implicit declaration of function 'delay_us'
make: *** [mmc.o] Error 1
> Process Exit Code: 2
> Time Taken: 00:05
Добавлено: Вт июл 21, 2009 13:04:42
Spider
Прости конечно, но речь шла о mmc.c из библиотеки FF. Там свой.
Добавлено: Вт июл 21, 2009 13:10:04
more
Странно скачивал с офиц.сайта.. в архиве было две папки doc и src:(
а в приложении картинка.. скан содержимого папки src
Добавлено: Вт июл 21, 2009 13:15:26
more
скачал файлы проектов с сайта
http://elm-chan.org/fsw/ff/ffsample.zip
там был фаил mmc.c
скопировал в проект свой, всеравно ерорит(
там есть и для авр, сейчас поизучаю.... потом отпишусь
Добавлено: Откомпилировал, нормально...
сейчас буду симулировать согласно схеме...
Добавлено: Ср июл 22, 2009 14:14:35
more
Эх.. собрал в протеусе схемку для симуляции, согласно той что в проекте, но даже UART что то не работает(
Хотя вставляю моргание диодов - работает(
Re: Требуется помощь MMC/SD IK ATmega срочно
Добавлено: Пн дек 12, 2011 10:04:26
kun_san
Не могу подключить sd карту к меги 128. на меге32 работает все норм. как я понял там нужно заточить diskio.с под мегу128..пробывал, но увы не получается. Нужна помощь. Может есть у кого-нибудь готовый файл?Можете выложить?