Требуется помощь MMC/SD IK ATmega срочно

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
more
Родился
Сообщения: 11
Зарегистрирован: Сб июл 18, 2009 09:50:21

Требуется помощь MMC/SD IK ATmega срочно

Сообщение 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.
Я знаю, что вопросы эти поднимались не однократно, особенно про ИК, но либо я что то не понимаю, либо я ... :oops:

PS: прошу прощение что много написал, ну просто это моя последняя надежда
Реклама
Аватара пользователя
Spider
Опытный кот
Сообщения: 732
Зарегистрирован: Чт дек 29, 2005 07:29:25
Откуда: Омск
Контактная информация:

Сообщение 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); //Всё пример кончился
}

Вопросы?
Реклама
Аватара пользователя
BCluster
Собутыльник Кота
Сообщения: 2512
Зарегистрирован: Пн апр 06, 2009 19:33:29
Откуда: Молдова, Кишинев
Контактная информация:

Сообщение BCluster »

мм, а вам обязательно использовать сд карту? Подумайте, внутренней паняти проца хватит на тыщ пять проходов туда-сюда
more
Родился
Сообщения: 11
Зарегистрирован: Сб июл 18, 2009 09:50:21

Сообщение more »

Спасибюо большое Уважаемый Spider, но мне как то больше и лучше под CodeVision, т.к. программы , модули я уже написал под все остальное. Но я попытаюсь разобраться.извеняюсь если что то резкое может быть в словах моих.. я новичек и мне проще и легче делать в коде визионе. Но я обязательно попытаюсь разобраться в Вашем коде!
мм, а вам обязательно использовать сд карту? Подумайте, внутренней паняти проца хватит на тыщ пять проходов туда-сюда

Ну в дальнейшем, я хочу записывать картинку с веб камеры (буду использовать другой модуль и другой МК, пока надо научиться работать с ФАТ выполняя простейшие действия)
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
pleshkov
Нашел транзистор. Понюхал.
Сообщения: 164
Зарегистрирован: Сб окт 11, 2008 12:05:19
Откуда: RU, Lipetsk
Контактная информация:

Сообщение pleshkov »

more писал(а):Ну в дальнейшем, я хочу записывать картинку с веб камеры (буду использовать другой модуль и другой МК, пока надо научиться работать с ФАТ выполняя простейшие действия)

<offtopic>И тут остапа понесло ....</offtopic>
Может лучше для начала определиться с архитектурой, а потом уже лезть в дебри?
Реклама
more
Родился
Сообщения: 11
Зарегистрирован: Сб июл 18, 2009 09:50:21

Сообщение more »

pleshkov писал(а):<offtopic>И тут остапа понесло ....</offtopic>
Может лучше для начала определиться с архитектурой, а потом уже лезть в дебри?

Ну в данном случае я и говорю, что мне надо ИК и ФАТ. просто писать в фаил на карточку.
а остальное это остальное..

Сегодня посидел с WinAVR, что то не получается... Лучше на кодевизионе.. пока экспререментирую:)
Реклама
Аватара пользователя
pleshkov
Нашел транзистор. Понюхал.
Сообщения: 164
Зарегистрирован: Сб окт 11, 2008 12:05:19
Откуда: RU, Lipetsk
Контактная информация:

Сообщение pleshkov »

more писал(а):
pleshkov писал(а):<offtopic>И тут остапа понесло ....</offtopic>
Может лучше для начала определиться с архитектурой, а потом уже лезть в дебри?

Ну в данном случае я и говорю, что мне надо ИК и ФАТ. просто писать в фаил на карточку.
а остальное это остальное..

Сегодня посидел с WinAVR, что то не получается... Лучше на кодевизионе.. пока экспререментирую:)

Если не горит, то завтра вечером смогу поделиться исходниками для winavr. Тоже логгер начинал делать. Пока забросил в связи с отпуском :)
more
Родился
Сообщения: 11
Зарегистрирован: Сб июл 18, 2009 09:50:21

Сообщение 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
:(
Последний раз редактировалось more Вт июл 21, 2009 11:18:06, всего редактировалось 1 раз.
Аватара пользователя
Spider
Опытный кот
Сообщения: 732
Зарегистрирован: Чт дек 29, 2005 07:29:25
Откуда: Омск
Контактная информация:

Сообщение Spider »

ff.c нужно добавить в проект, чтобы линкер его прилинковал.
more
Родился
Сообщения: 11
Зарегистрирован: Сб июл 18, 2009 09:50:21

Сообщение 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);
}
Аватара пользователя
Spider
Опытный кот
Сообщения: 732
Зарегистрирован: Чт дек 29, 2005 07:29:25
Откуда: Омск
Контактная информация:

Сообщение Spider »

а где же?

Код: Выделить всё

Compiling C: ff.c

Значит не добавил.
more
Родился
Сообщения: 11
Зарегистрирован: Сб июл 18, 2009 09:50:21

Сообщение more »

Вот прикрепляю весь свой проект для вин авра с мкфайлом.
Вроде все сделал как ты мне сказал :oops:


там вместе с библиотекой для фатс, но только без папочки options, весит много
Вложения
prsd.rar
(165.85 КБ) 447 скачиваний
Последний раз редактировалось more Вт июл 21, 2009 12:42:28, всего редактировалось 1 раз.
Аватара пользователя
Spider
Опытный кот
Сообщения: 732
Зарегистрирован: Чт дек 29, 2005 07:29:25
Откуда: Омск
Контактная информация:

Сообщение Spider »

всё правильно, теперь возьми mmc.c и пропиши его следом за ff.c и будет веселее.
more
Родился
Сообщения: 11
Зарегистрирован: Сб июл 18, 2009 09:50:21

Сообщение 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
Вложения
mmc.c
(7.35 КБ) 319 скачиваний
Аватара пользователя
Spider
Опытный кот
Сообщения: 732
Зарегистрирован: Чт дек 29, 2005 07:29:25
Откуда: Омск
Контактная информация:

Сообщение Spider »

Прости конечно, но речь шла о mmc.c из библиотеки FF. Там свой.
more
Родился
Сообщения: 11
Зарегистрирован: Сб июл 18, 2009 09:50:21

Сообщение more »

Странно скачивал с офиц.сайта.. в архиве было две папки doc и src:(
а в приложении картинка.. скан содержимого папки src
Вложения
sostav.JPG
src
(93.99 КБ) 741 скачивание
more
Родился
Сообщения: 11
Зарегистрирован: Сб июл 18, 2009 09:50:21

Сообщение more »

скачал файлы проектов с сайта
http://elm-chan.org/fsw/ff/ffsample.zip
там был фаил mmc.c
скопировал в проект свой, всеравно ерорит(
там есть и для авр, сейчас поизучаю.... потом отпишусь


Добавлено: Откомпилировал, нормально...
сейчас буду симулировать согласно схеме...
more
Родился
Сообщения: 11
Зарегистрирован: Сб июл 18, 2009 09:50:21

Сообщение more »

Эх.. собрал в протеусе схемку для симуляции, согласно той что в проекте, но даже UART что то не работает(
Хотя вставляю моргание диодов - работает(
kun_san
Родился
Сообщения: 1
Зарегистрирован: Пн дек 12, 2011 09:55:27

Re: Требуется помощь MMC/SD IK ATmega срочно

Сообщение kun_san »

Не могу подключить sd карту к меги 128. на меге32 работает все норм. как я понял там нужно заточить diskio.с под мегу128..пробывал, но увы не получается. Нужна помощь. Может есть у кого-нибудь готовый файл?Можете выложить?
Вложения
diskio.c
заточенный diskio под мегу 32....
(18.8 КБ) 566 скачиваний
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»