МК + SD карта
Модератор: koolhatcker
МК + SD карта
Подскажите как лучше всего связать SD карту и ATmega32
с наименьшими затратами ресурсов.
Задача - раз в несколько секунд дописывать в конец файла информацию, полученную с GPS модуля.
Пробовал использовать драйвер SD + FAT, поставляемый вместе с Codevision (на основе библиотек Chan-а), но пока безуспешно.. Маунтится нормлаьно, но при попытке считывания директории - все виснет
Возможно это связано с тем, что у меня кроме карты еще подключен дисплей от телефона к SPI..
с наименьшими затратами ресурсов.
Задача - раз в несколько секунд дописывать в конец файла информацию, полученную с GPS модуля.
Пробовал использовать драйвер SD + FAT, поставляемый вместе с Codevision (на основе библиотек Chan-а), но пока безуспешно.. Маунтится нормлаьно, но при попытке считывания директории - все виснет
Возможно это связано с тем, что у меня кроме карты еще подключен дисплей от телефона к SPI..
- TK-15
- Станкостроитель
- Сообщения: 123
- Зарегистрирован: 22 сен 2010, 00:00
- Откуда: Москва
- Контактная информация:
по SPI.xumuk писал(а):как лучше всего связать SD карту и ATmega32
с наименьшими затратами ресурсов.
..можно "организовать" программный SPI на любых свободных выводахxumuk писал(а):попытке считывания директории - все виснет Возможно это связано с тем, что у меня кроме карты еще подключен дисплей от телефона к SPI..
-
- Смотрящий
- Сообщения: 1504
- Зарегистрирован: 30 авг 2009, 00:00
- Откуда: Омск
- Контактная информация:
-
- Смотрящий
- Сообщения: 1504
- Зарегистрирован: 30 авг 2009, 00:00
- Откуда: Омск
- Контактная информация:
Не в тему:
life, да я смирился уже . Пока сами на грабли не наступят - хоть заобъясняйся...
Автономный контроллер станка с ЧПУ: http://it-en.ru/cnc
- kernel
- Станкостроитель
- Сообщения: 765
- Зарегистрирован: 05 фев 2011, 01:00
- Имя: Max
- Откуда: Красноярск
koolhatcker писал(а):Не в тему: life, да я смирился уже . Пока сами на грабли не наступят - хоть заобъясняйся...
Не в тему:
+1. Когда-то уже наступил на эти грабли -- пользовался "MikroPascal for AVR". В то время в их примерах (схемные примеры "спаривания" компонентов) были ну настолько глупые ошибки Причем не работало, пока уже сам не разберешься в чем дело. Для примера, в старой версии (по-моему 4-я) был пример работы с UART, так там Rx&Tx были так перепутаны на MAX232, что отправленный байт со стороны контроллера приходил ему же обратно и связи с компом не было. Потом еще один баг, из-за которого в то время даже проект заморозился на год (просто на столько запутал их пример, что даже через большой промежуток времени, когда уже и этим микропаскалем не пользовался никто из нас, не могли понять в чем дело) -- было показано неверное согласование уровней с использованием 74HCT08N. В общем, когда перешли на WinAVR -- границы АВРостроения значительно расширились и зависимость от "дозы" примеров быстро исчезла.
Ну в общем-то тема то и не про компиляторы и т.п.
Ну в общем-то тема то и не про компиляторы и т.п.
По теме хочу добавить, что лучше библиотеки от Чана ничего не попадалось мне. Там около года-полтора назад даже появилась поддержка LFN в FAT. Все работает очень хорошо.
xumuk, а уровни МК и SD нормально согласованы (если, конечно, МК от 5В питается)? Точно не могу вспомнить, но у меня проблема вроде бы наблюдалась до тех пор, пока я с инициализацией SPI не намудрил чего-то (и еще помню DDR для портов как-то по особому делал, вроде с SS (SPI) связано было что-то). Еще рекомендуют (по-хорошему) питание на SD подавать через полевик для нормального сброса SD в начале запуска МК.
- kernel
- Станкостроитель
- Сообщения: 765
- Зарегистрирован: 05 фев 2011, 01:00
- Имя: Max
- Откуда: Красноярск
2 xumuk. У меня инициализация самого SPI такая (asm):
Такая инициализация работает для 3-х устройств, повешенных на SPI.
И, кстати, для гарантии нужно уровень выхода DATA OUT у флэшки поднимать.
Добавлено позже:
Moonglow (ответ на сообщение ниже), в то время багов было на сколько много, что для их "отписывания" разработчикам можно было целую жизнь потратить -) А вообще, мне было проще уйти на WinAVR, тем более бесплатная.
Код: Выделить всё
cbi PORTB, LCD_RESET ; display reset
sbi DDRB, LCD_RESET ; set reset as output
cbi DDRB, LCD_MISO ; MISO is always input in SPI
sbi PORTB, LCD_MISO ; MISO is always input in SPI
sbi DDRB, LCD_MOSI ; MOSI must be set as output for SPI
sbi DDRB, 4 ; SS
sbi PORTB, LCD_CS ; deselect display
sbi DDRB, LCD_CS ; SS must be output for Master mode to work
cbi PORTB, LCD_SCK ; set SCK lo
sbi DDRB, LCD_SCK ; set SCK as output
sbi PORTB, LCD_RS ; start with RS=high
sbi DDRB, LCD_RS ; RS signal is output
ldi r24,(1<<MSTR) | (1<<SPE);
out SPCR,r24
; ldi r24,0
ldi r24,(1<<SPI2X) ; double speed bit
out SPSR,r24
ldi r24,1
; ldi r24,0
ldi r25,0
rcall mswait ; wait one ms to have a nice reset
sbi PORTB, LCD_RESET ; release reset
in r24,SPSR ; clear status
ret
И, кстати, для гарантии нужно уровень выхода DATA OUT у флэшки поднимать.
Добавлено позже:
Moonglow (ответ на сообщение ниже), в то время багов было на сколько много, что для их "отписывания" разработчикам можно было целую жизнь потратить -) А вообще, мне было проще уйти на WinAVR, тем более бесплатная.
Последний раз редактировалось kernel 16 апр 2011, 22:39, всего редактировалось 2 раза.
Re: МК + SD карта
Нужно считать координаты X и Y из файла *.drl для сверловки.Исспользую библиотеку Petit FatFs от Чана.
Считываю блоком (512 байт) перебирая побайтно вхождения X и Y так:
И всё бы ничего, но если файл превышает по размеру объем считываемого блока то, есстественно, будет ошибка в чении координат.
Как можно побороть данную проблемму? Если есть у кого наработки или соображения - пишите. Желательно с кодом - так мне легче разбираться.
Считываю блоком (512 байт) перебирая побайтно вхождения X и Y так:
Показать/Спрятать
Как можно побороть данную проблемму? Если есть у кого наработки или соображения - пишите. Желательно с кодом - так мне легче разбираться.
-
- Смотрящий
- Сообщения: 1504
- Зарегистрирован: 30 авг 2009, 00:00
- Откуда: Омск
- Контактная информация:
Re: МК + SD карта
Естественно только по окончании одного блока считывать следующий. Типа pf_lseek = pf_lseek+512 .ChaiSER писал(а):Как можно побороть данную проблемму?
Автономный контроллер станка с ЧПУ: http://it-en.ru/cnc
Re: МК + SD карта
koolhatcker, пробовал, только блок не всегда заканчивался концом строки. ИМХО нужно как-то последнюю строку обрабатываемого блока с обрывом и неполную строку следующего блока загонять в отдельный буфер и уже из него считывать координаты. Или есть более правильный метод?
Re: МК + SD карта
Стандартный приём: функция читающая из буфера байты пока не встретит конец строки. Если быйты в буфере кончаются раньше, то она загружает в буфер след. порцию из файла.
Я не Христос, рыбу не раздаю. Но могу научить, как сделать удочку.
Re: МК + SD карта
s3301, это понятно, осталось только в коде воспроизвести...
-
- Смотрящий
- Сообщения: 1504
- Зарегистрирован: 30 авг 2009, 00:00
- Откуда: Омск
- Контактная информация:
Re: МК + SD карта
ChaiSER, так вам разжевать и положить?:)
Неужели самому не интересно?
Неужели самому не интересно?
Автономный контроллер станка с ЧПУ: http://it-en.ru/cnc
Re: МК + SD карта
koolhatcker, очень интерессно, иначе-бы и не занимался этим. Дело в том, что кодить МК это моё хоби, которым могу заниматься месяц-два в году, поэтому и знания на таком уровне...
Продолжаю. Для начала проверяю считываеться ли поблочно файл больше блока (512 байт). Всё работает, код ниже:
Далее, пробую читать файл построчно. Компилиться, но не работает. Вот код:
Где ошибка?
Продолжаю. Для начала проверяю считываеться ли поблочно файл больше блока (512 байт). Всё работает, код ниже:
Показать/Спрятать
Показать/Спрятать
-
- Смотрящий
- Сообщения: 1504
- Зарегистрирован: 30 авг 2009, 00:00
- Откуда: Омск
- Контактная информация:
Re: МК + SD карта
Может тут:ChaiSER писал(а):Где ошибка?
ChaiSER писал(а):char row[] = {};
...
row[row_counter] = read_buf;
Компилятор не всегда думает так, как думаем мы .
А может и в другом месте...
Автономный контроллер станка с ЧПУ: http://it-en.ru/cnc