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

maximan

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

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

  • Посещение

Репутация

0 Обычный
  1. Помогите пожалуйста реализовать. 1)Необходимо, чтоб некая функция начинала выполняться после кратковременного нажатия кнопки и прерывалась после повторного нажатия. 2)Эта же функция начинала выполняться во время длительного нажатия кнопки (на протяжении всего нажатия) и прекращала выполняться после отпускания. Кнопка одна и та же. Контроллер: AtMega8; Язык программирования:Си.
  2. Спасибо огромное! Подскажите, пожалуйста.Как реализовать такой режим отображения? 1)Время-отображается 20сек; 2)Дата-отображается 10сек; и так по кругу.
  3. Не могли бы вы скинуть исходник? Просто Ваш случай, практически, в точности копирует мой.
  4. Как правильно организовать архитектуру программы для часов? Часы должны показывать время дату и температуру, по очереди с определённой задержкой. Как организовать настройку времени? Контроллер: Mega8; IDE: Atmel Studio.
  5. Лучше б вы объяснили, что не так в моем коде.
  6. Это всё хорошо, а чем мой код плох? А на счёт умеет ли симулятор студии имитировать работу модуля SPI, то я тоже не знаю((( Я заливал прошивку на контроллер, на выходы регистра подключал диоды, но ничего не происходит.
  7. Это все исправил спасибо. #define F_CPU 8000000UL #include <avr/io.h> #include <util/delay.h> #define SPI_PORTX PORTB #define SPI_DDRX DDRB #define SPI_MISO 4 #define SPI_MOSI 3 #define SPI_SCK 5 #define SPI_SS 2 void SPI_Init(void) { SPI_DDRX = (1<<SPI_MOSI)|(1<<SPI_SCK)|(1<<SPI_SS)|(0<<SPI_MISO); SPI_PORTX = (1<<SPI_MOSI)|(1<<SPI_SCK)|(1<<SPI_SS)|(1<<SPI_MISO); SPCR = (1<<SPE)|(0<<DORD)|(1<<MSTR)|(0<<CPOL)|(1<<CPHA)|(0<<SPR1)|(0<<SPR0); SPSR = (1<<SPI2X); } int main(void) { SPI_Init(); DDRD=0xFF; while(1) { unsigned char T=0; while(T<=254) { T++; unsigned char byte1; unsigned char b = (T/10)<<4; unsigned char c = T%10; byte1 = b+c; PORTD = byte1; SPI_PORTX &= ~(1<<SPI_SS); SPDR = byte1; while(!(SPSR & (1<<SPIF))); SPI_PORTX |= (1<<SPI_SS); _delay_ms(1500); } } } Пробовал отладчик в Атмел Студио программа останавливается на этой строчке: " while(!(SPSR & (1<<SPIF)));". И дальше выполнение не идёт, можно только подать команду перезапуска контроллера.
  8. Я так и предполагал) Какие, конкретно, ошибки?
  9. Скажите почему не работает данный код? #define F_CPU 8000000UL #include <avr/io.h> #include <util/delay.h> #define SPI_PORTX PORTB #define SPI_DDRX DDRB #define SPI_MISO 4 #define SPI_MOSI 3 #define SPI_SCK 5 #define SPI_SS 2 void SPI_Init(void) { SPI_DDRX = (1<<SPI_MOSI)|(1<<SPI_SCK)|(1<<SPI_SS)|(0<<SPI_MISO); SPI_PORTX = (1<<SPI_MOSI)|(1<<SPI_SCK)|(1<<SPI_SS)|(1<<SPI_MISO); SPCR = (1<<SPE)|(0<<DORD)|(1<<MSTR)|(0<<CPOL)|(1<<CPHA)|(0<<SPR1)|(0<<SPR0); SPSR = (1<<SPI2X); } int main(void) { SPI_Init(); DDRD=0xFF; DDRB=0xFF; while(1) { unsigned char T=0; while(T<=254) { T++; unsigned char byte1; unsigned char b = (T/10)<<4; unsigned char c = T%10; byte1 = b+c; PORTD = byte1; SPDR = byte1; while(!(SPSR & (1<<SPIF))); SPI_PORTX |= (1<<SPI_SS); _delay_ms(1500); } } } Прошивка не работает в протеусе и на реальном прошитом контроллере. IDE: Atmel Studio; Программатор: Usbasp 2.0. Схема прилагается.
×
×
  • Создать...