Подписаться на получение новых статей на почту:

Передача данных по SPI и TWI между AVR и картой SD. Шаг №38

Всем привет. Для рассмотрения следующей темы, необходимо напомнить, что в прошлой статье был рассмотрен ждущий режим, который для нас станет основным элементом в синхронизации МК. Сегодня мы свяжем передачу данных по интерфейсу TWI между контроллерами и SPI между контроллером и картой SD (Подключение карты SD и интерфейс SPI...Шаг №19).

Данный шаг будет завершающим перед наладкой нашего контроллера сбора данных. Задача стоит следующим образом: произведем передачу строки с МК1 (ведущего) по интерфейсу TWI на МК2 (ведомому) выведем из спящего (ждущего) режима, передадим строку по SPI, от МК2 (ведомого) на карту SD, прочитаем данные из карты и передадим ведущему, который в свою очередь выведет их на дисплей. На рисунке ниже визуальное отображение поставленной задачи. Как всегда протестируем в симуляторе и железе.

 

Передача данных по SPI и TWI

Программу возьмем из предыдущей статьи. Здесь вместо времени мы передадим строку “7777”. Код ведомого микроконтроллера мы дополним кодом для работы с файловой системой Petit FatFs. Напомню ее мы рассмотрели в статье №22 и №23, поэтому на ней заострять внимание мы не будем. Ниже расположен основной код ведущего и ведомого.

 

 

Код ведущего.
while (1) {
       i2cSetLocalDeviceAddr (LOCAL_ADDR, TRUE);
       unsigned char mBuf[4]={"7777"};   
       /*строка для передачи*/
       _delay_ms (100);
       i2cMasterSend (TARGET_ADDR,4,&mBuf[0]);
        /*передача ведущему*/
       _delay_ms (2000);
       /*задержка для чтения/записи ведущим на карту SD*/
       i2cMasterReceive (TARGET_ADDR,4,&buf1[0]);
       /*прием строки от ведущего, прочитанной из карты SD*/
       n=strtol (buf1,&buf,10);
       /*преобразовываем строку в число */
       Display (n);
       /*выводим число на индикатор*/
       _delay_ms (1000);
}

Код ведомого.
while (1) {
        i2cSetLocalDeviceAddr (LOCAL_ADDR, TRUE);  /*адрес ведомого микроконтроллера*/
        asm («sleep»);/*Улаживаем «баюшки»*/
        i2cSetSlaveReceiveHandler (i2cSlaveReceiveService); /*принимаем данные от ведущего*/
        /*Здесь код для работы с файловой системой*/
        ……………………………………………………………
        …………………………………………………………….
       asm («sleep»);     /*переводим в спящий режим*/
       i2cSetLocalDeviceAddr (LOCAL_ADDR, TRUE);
       i2cSetSlaveTransmitHandler (i2cSlaveTransmitService); /*Передаем данные ведущему*/
       return 0;   }

Результат работы ниже на рисунке. Исходники и проект выложен ниже. Не забываем что для работы с картой в симуляторе создаем сначала образ, а в него уже закидываем текстовый файл (статьи №22 №23).

Передача данных на карту SD

Как видите. наша строка в виде цифр 7777 прекрасно переносится, записывается и до записывается с отслеживанием номера сектора. По работе в симуляторе, как всегда возник баг, в режиме ведомый передатчик, с ним мы разобрались в статье №35. Код рабочий. Переходим к последнему шагу – тестируем в железе.

На рисунке ниже результат работы. Так же как и в симуляторе строка записалась и до записалась, далее ведомый произвел чтение с карты, вошел в ждущий режим и по совпадению адреса по TWI, передал строку ведущему, тот в свою очередь преобразовал ее в число и вывел на индикатор.

Передача данных по SPI и TWI между AVR и картой SD.

Исходники и проект в симуляторе

Передача данных по SPI и TWI между AVR и SD картой ( Скачали: 155 чел. ) 


Подведем итог: в этой статье были рассмотрены два интерфейса передачи данных (TWI и SPI). Связали их в общий код, и с помощью ждущего режима на ведомом контроллере добились синхронной работы обоих контроллеров. В следующей статье свяжем код всех предыдущих постов ,соберем логгер, а именно:кнопки для коррекции времени(предварительно настроив АЦП), работа с файловой системой Petit FatFs, работа с интерфейсами SPI , TWI , 1-wire , сброс по времени на карту даты и времени(DS1307), температуры измеряемых помещений или окружающей среды (DS18B20), влажности и температуры (DHT11). Попробуем все это спроектировать сначала в симуляторе и перенесем в железо. Проанализируем, подведем итог. На этом все. Всем пока.

Просмотрено 1757 раз.

Я на Google+

Добавить комментарий

Ваш e-mail не будет опубликован.

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Subscribe without commenting