Перейти к содержанию
    

nvk

Участник
  • Постов

    50
  • Зарегистрирован

  • Посещение

Репутация

0 Обычный

Информация о nvk

  • Звание
    Участник
    Участник
  1. Сделал по другому: после каждого обращения к модулю sim300 считываю ответ функцией даже если этот ответ не нужен для обработки. Например: sendSMS("string"); USART_geta(); // просто считываем ответ USART_transmit("AT+CBC"); USART_geta(); { обработка принятого ответа} И это работало с самого начала, просто я хотел сделать проще...
  2. Очистка приёмного буфера USART

    Добрый день! Зашёл в тупик с очисткой буфера Atmega32. Очищаю буфер как в даташите: void USART_Flush() { unsigned char dummy; while (UCSRA & (1<<RXC)) dummy = UDR; } Этот вариант не работает. Написал другой вариант с очисткой битов RXEN, TXEN: void USART_Flush() { UCSRB = 0x00; UCSRB = 0x18; } Этот код тоже не работает, всё равно остаются несчитанные символы. В чём проблема?
  3. WinAVR и Atmega32

    Блин, точно, я протупил. Спасибо. P.S. Только зовут меня не Артём.
  4. WinAVR и Atmega32

    Добрый день! Написал следующий код: i = 0; while (((PINA & 0x08)==0x08) || i<60) { _delay_ms(1000); i++; } Он почему-то не работает. Если убираю одно условие, например, так: i = 0; while ((PINA & 0x08)==0x08) { _delay_ms(1000); i++; }, то работает. Почему не работает операция "ИЛИ" (||)? WinAVR от 10.01.2010, AVR Studio версии 4.18.716.
  5. Подключил. В терминале пишет: - до подключения зарядки at+cbc +CBC: 0,90,4061 - после подключения Charging in NORMAL MODE at+cbc +CBC: 1,97,4161 Т.е. процесс зарядки пошёл. Потом отключил, второй раз включаю пишет: Charging in NORMAL MODE at+cbc +CBC: 2,96,4153 Откуда взялся первый параметр равный 2? Там всего два значения - 0 и 1. Батарея при этом не заряжается.
  6. Добрый день! Хочу использовать встроенную зарядку с подключением 5В через реле. Можно ли так делать и какое лучше реле использовать? Заранее спасибо за ответы.
  7. Добрый день! Имеется МК Atmega32 и SIM300CZ. Как МК проверить, что модуль GSM зарегистрировался в сети и можно отправлять СМС и совершать звонки? Сигнал STATUS здесь не подходит.
  8. "Мусор" на входе Atmega

    Для того, чтобы проверить один старший бит, написал так: inputs = PIND; inputs = inputs & 0x80; if (inputs!=0x80) {} Работает, даже если вход подвешен в "воздухе".
  9. "Мусор" на входе Atmega

    AVR Studio 4.18 Изменил программу так: #include <avr/io.h> #include <util/delay.h> #include <string.h> #include <stdlib.h> void USART_Transmit(char *data) { int i,s; s = strlen(data); for(i=0;i<s;i++) { /* Wait for empty transmit buffer */ while (!( UCSRA & (1<<UDRE))); /* Put data into buffer, sends the data */ UDR = data[i]; } } int main(void) { int inputs; char str[10]; char *ptr; //Все выводы порта В - входы DDRB = 0x00; PORTB = 0xFF; //Настройка параметров связи UBRRH = 0x0; UBRRL = 0x7; //скорость 115,2 Кбит UCSRC = 0x86; UCSRA = 0x0; UCSRB = 0x19; //8 бит данных while(1) { inputs = PINB; ptr = itoa(inputs, str, 10); USART_Transmit(str); } return 0; } Выводит на терминал: "ЪК". Наверное, нужно дорабатывать схему подключения...
  10. "Мусор" на входе Atmega

    Пробовал писать так: inputs = PINB; Всё равно на входе не 0.
  11. "Мусор" на входе Atmega

    Болтаются в воздухе. Вольтметром. PORTB предназначен как для чтения так и для записи, а PINB только для чтения. В этом и отличие.
  12. "Мусор" на входе Atmega

    1. Микроконтроллер Atmega32, тактовая частота от внешнего кварцевого резонатора частотой 14,7456 МГц. Строки приходят на терминал правильно (например, "HELLO, WORLD!"). 2-4. См. пункт 1. Если написать: if ((PORTB!=0x00) <некое действие>, то это действие будет выполнятся, хотя на всех пинах 0В.
  13. "Мусор" на входе Atmega

    Добрый день! Имеется следующая программа: #include <avr/io.h> #include <util/delay.h> #include <string.h> #include <stdlib.h> void USART_Transmit(char *data) { int i,s; s = strlen(data); for(i=0;i<s;i++) { /* Wait for empty transmit buffer */ while (!( UCSRA & (1<<UDRE))); /* Put data into buffer, sends the data */ UDR = data[i]; } } int main(void) { int inputs; char str[10]; char *ptr; //Все выводы порта В - входы DDRB = 0x00; PORTB = 0x00; //Настройка параметров связи UBRRH = 0x0; UBRRL = 0x7; //скорость 115,2 Кбит UCSRC = 0x86; UCSRA = 0x0; UCSRB = 0x19; //8 бит данных while(1) { inputs = PORTB; ptr = itoa(inputs, str, 10); USART_Transmit(str); } return 0; } На терминал выводятся числовые или буквенные символы, хотя должен быть 0. Измерял мультиметром напряжение на каждом отводе - либо 0,02В либо -0,6В.
  14. Atmega32+UART

    Заработало. Установил СКОРТ=0.
  15. Atmega32+UART

    С такими настройками работает. Не установил только бит BODEN. Подключил внешний резонатор на 8МГц - не работает. Опять фьюзы неправильно установлены?
×
×
  • Создать...