|
Покритикуйте алгоритм включения и выключения устройства на AVR |
|
|
|
Mar 29 2011, 09:21
|
Гуру
     
Группа: Участник
Сообщений: 2 072
Регистрация: 14-01-06
Пользователь №: 13 164

|
Господа, есть некое устройство на АТМега, управляющее TFT-дисплеем с тачпанелью и небольшим набором периферии. Подключено к автомобильному аккумулятору постоянно. А значит нужно предусмотреть включение и выкючение устройства. При всем изяществе конструкции, наличии тачпанели слишком жалко будет смотреться механический переключатель для коммутации. Хочется выключать устройство нажав виртуальную кнопку на тачпанели, а включать простым прикосновением к экрану. А посему возникла такая идея: Контроллер управляет дисплеем через специальную плату (если кому интересно TFT-компаньон) Эта плата умеет выходить в режим пониженного потребления и понимает в нем только две команды - выход из режима пониженного энергопотребления и опрос тачпанели. Я планирую по нажатии на виртуальную кнопку на экране переводить его в PowerDown. Затем переводть в PowerDown (именно в этот режим) и сам AVR. Как включать? Предварительно - настроить WatchDog на 1 сек и на генерацию прерывания по переполнению. В прерывании опрашивать тачпанель и если было прикосновение - можно просыпаться. Однако получается следующее - при выключении всего устройства мы его на самом деле не выключаем, а переводим в спящий режим, и при включении оказываемся на том же месте. Хотелось бы перезагрузить и контроллер. А для этого хочу попробовать следующее - если при обработке прерывания от сорожевого таймера выяснится что к тачпанели прикасались - перенастраивать таймер на сброс контроллера и более короткий период (самый короткий 16 мс). После чего ждать следующего переполнения таймера.
Пока не пробовал, идею сочинял на работе, попробую только дома.
Вопросы: 1. Довольно странный алгоритм получился - при выключении устройство на самом деле просто останавливается, а истинная его перезагрузка происходит только при включении. Хотя на самом деле ввсе выглядит благористойно (забыл сказать - в режиме PowerDown TFT компаньон не только меньше жрет, но и подсветку отключает). Может есть какие-то более адекватные истрически сложившиеся алгоритмы? 2. Есть ли какой-то иной способ программного сброса AVR? Цеплять какой-нибудь выход на RESET не предлагайте, плата сделана и детали напаяны. 3. Не происходит ли чего нехорошего с портами ввода вывода в режиме PowerDown АВР? Нужно чтобы пины оставались в том же состоянии. Спасибо.
Сообщение отредактировал zheka - Mar 29 2011, 09:22
|
|
|
|
|
 |
Ответов
|
Mar 29 2011, 18:27
|

Профессионал
    
Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339

|
Цитата(zheka @ Mar 29 2011, 14:38)  Но даже глядя на то, что вы написали - это просто уловка для перемещения программы в начало, а не сброс. Интересно , а что Вы понимаете под сбросом? Или Вы считаете что Цитата .... но я все же предпочту для перезагрузки WDT перемещает программу куда то вдругое место ,а не на 0x0000
--------------------
Закон Мерфи:
Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
|
|
|
|
|
Mar 30 2011, 09:57
|

Профессионал
    
Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339

|
Цитата(aaarrr @ Mar 30 2011, 00:44)  Скажите, а как вы инициализируете USART, например?
И сброс как делаете - "JMP 0"? Да так же как и все. Ниже пример Код ;/ *********************** ;/ * * ;/ * ATMega48P * ;/ * Jig for Hotel * ;/ * * ;/ *********************** ;+ Version 1.0 .nolist .include "m48def.inc" .list .listmac .include "macros_Jig.asm" .include "JigHotelTV.inc" ;************************************************* ;* ;;/ Определение командного сегмента;;* * ;************************************************** .cseg .org 0 ;************************************************* ;* ;;/Initialization прерываний;;* * ;************************************************* rjmp RESET; Reset Handler ; rjmp EXT_INT0; IRQ0 Handler ; rjmp EXT_INT1; IRQ1 Handler ; rjmp PCINT0; PCINT0 Handler ; rjmp PCINT1; PCINT1 Handler ; rjmp PCINT2; PCINT2 Handler ; rjmp WDT; Watchdog Timer Handler ; rjmp TIM2_COMPA; Timer2 Compare A Handler ; rjmp TIM2_COMPB; Timer2 Compare B Handler ; rjmp TIM2_OVF; Timer2 Overflow Handler ; rjmp TIM1_CAPT; Timer1 Capture Handler ; rjmp TIM1_COMPA; Timer1 Compare A Handler ; rjmp TIM1_COMPB; Timer1 Compare B Handler ; rjmp TIM1_OVF; Timer1 Overflow Handler ; rjmp TIM0_COMPA; Timer0 Compare A Handler ; rjmp TIM0_COMPB; Timer0 Compare B Handler ; rjmp TIM0_OVF; Timer0 Overflow Handler ; rjmp SPI_STC; SPI Transfer Complete Handler .org URXCaddr rjmp USARTRXC ; USART, RX Complete Handler rjmp USARTUDRE ; USART, UDR Empty Handler ; rjmp USART_TXC; USART, TX Complete Handler ; rjmp ADC; ADC Conversion Complete ; rjmp EE_RDY; EEPROM Ready Handler ; rjmp ANA_COMP; Analog Comparator Handler ; rjmp TWI; 2-wire Serial Interface ; rjmp SPM_RDY; Store Program Memory Ready ;| KOOL .include "Delays.asm" .include "LCD.asm" .include "USART.asm" .include "JIGKeyBoard.asm" ;************************************************* ;* ;;/Установка стека и Очитска регистров;;* * ;************************************************* RESET: cli ; запрет всех прерываний ldi temp,$80 ; Запрещаем работу out ACSR,temp; компаратора .include "1Init_MCU.asm" ; Очистка памяти и всех регистров ;************************************************** ;* ;;/Initialization PORTS;;* * ;************************************************** ldi temp,0b_0000_1111 out DDRD,temp ; ПортD старшие вход Младшие -выход ldi temp,0b_1111_1111 out PORTD,temp ;- На старшие-(1), младшие RX0&RX1-подключены ldi temp,0b_1110_1111 out DDRB,temp ; ПортB старшие PB7-PB5,PB2-PB0 OUTputs, PB4 Input ldi temp,0b_1111_1111 out PORTB,temp ;- Pull resistor down ;************************************************** ;* ;;/Initialization LCD;;* * ;**************************************************
rcall LCD_INIT ;- Инициализация LCD
;************************************************** ;* ;;/Initialization USARTs;;* * ;************************************************** ;- INIT USART0 ldi temp,(SYSCLK/(16*USARTSPEED))-1 sts UBRR0L,temp ldi temp,1<<RXCIE0|0<<UDRIE0|1<<RXEN0|0<<TXEN0 sts UCSR0B,temp ldi temp,1<<USBS0|1<<UCSZ01|1<<UCSZ00 sts UCSR0C,temp ;+ Speed USART0 9600, 8-bit data, 1 STOP Ну и какая будет разница в инит по POWER UP, WDT , внешний сброс или из MAIN rjmp RESET как тут предлагали при определённых условиях
--------------------
Закон Мерфи:
Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
|
|
|
|
Сообщений в этой теме
zheka Покритикуйте алгоритм включения и выключения устройства на AVR Mar 29 2011, 09:21 forever_student Цитата(zheka @ Mar 29 2011, 13:21) ...
2.... Mar 29 2011, 09:53 forever_student Цитата(zheka @ Mar 29 2011, 14:38) Извнит... Mar 29 2011, 10:45 zheka Спасибо за совет, но я все же предпочту для переза... Mar 29 2011, 10:49 _Pasha Дык все тривиально, не о чем переживать. Первый по... Mar 29 2011, 11:28 SysRq Теоретически, можно перезагрузить МК тоже. На стар... Mar 29 2011, 15:55 Marian Цитата(zheka @ Mar 29 2011, 11:21) Однако... Mar 29 2011, 17:22 coolbassnik Есть идея заставить МК ресетить самого себя железн... Mar 29 2011, 17:30 _Pasha Цитата(coolbassnik @ Mar 29 2011, 20:30) ... Mar 29 2011, 17:33 IgorKossak Цитата(coolbassnik @ Mar 29 2011, 20:30) ... Mar 29 2011, 17:39 zombi Цитата(zheka @ Mar 29 2011, 13:21) Предва... Mar 29 2011, 20:24 Atridies Я не сильно знаю Атмегу, но на MSP430 я делал сбро... Mar 29 2011, 20:56 aaarrr Вот и попались. Логика USART'а сброшена не буд... Mar 30 2011, 10:45 forever_student Цитата(aaarrr @ Mar 30 2011, 14:45) ...Ло... Mar 30 2011, 11:04  aaarrr Цитата(forever_student @ Mar 30 2011, 15... Mar 30 2011, 12:32   forever_student Цитата(aaarrr @ Mar 30 2011, 16:32) ...Вы... Mar 30 2011, 13:22    aaarrr Цитата(forever_student @ Mar 30 2011, 17... Mar 30 2011, 13:33     forever_student Цитата(aaarrr @ Mar 30 2011, 17:33) Возмо... Mar 30 2011, 13:45 defunct Цитата(aaarrr @ Mar 30 2011, 12:45) Тоже ... Mar 30 2011, 13:51 ILYAUL Цитата(aaarrr @ Mar 30 2011, 14:45) Логик... Mar 31 2011, 11:38  aaarrr Цитата(ILYAUL @ Mar 31 2011, 15:38) Не по... Mar 31 2011, 11:54   ILYAUL Цитата(aaarrr @ Mar 31 2011, 15:54) Тольк... Mar 31 2011, 12:11 zheka Господа, необходимость железного сброса продиктова... Mar 30 2011, 15:04 aaarrr Ну а собственно sleep где? Mar 30 2011, 16:08 zheka КодНу а собственно sleep где?
Да уже исправил. Вс... Mar 30 2011, 16:48 zheka Так... работаю со сторожевым таймером...
Господа о... Mar 30 2011, 19:05 forever_student Цитата(zheka @ Mar 30 2011, 23:05) ...Сут... Mar 30 2011, 20:02 zheka Хм.. я обошелся вообще без флажка для WDT. В смысл... Mar 31 2011, 12:56 ILYAUL Цитата(zheka @ Mar 31 2011, 16:56) КРоме ... Mar 31 2011, 13:02  defunct Цитата(ILYAUL @ Mar 31 2011, 16:02) Это к... Mar 31 2011, 16:36   ILYAUL Цитата(defunct @ Mar 31 2011, 20:36) Наве... Mar 31 2011, 17:51 zombi Цитата(zheka @ Mar 31 2011, 16:56) КРоме ... Mar 31 2011, 22:12 zheka defunct, именно так.
Дело в том, что питание будет... Mar 31 2011, 18:04 ILYAUL Может 0,5 сек опрос Mar 31 2011, 19:30 zheka Так ведь он разрешен или я чего-то не понимаю...
В... Apr 1 2011, 06:02 zombi Цитата(zheka @ Apr 1 2011, 10:02) Так вед... Apr 1 2011, 08:18
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|