реклама на сайте
подробности

 
 
> Покритикуйте алгоритм включения и выключения устройства на AVR
zheka
сообщение Mar 29 2011, 09:21
Сообщение #1


Гуру
******

Группа: Участник
Сообщений: 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
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
zheka
сообщение Mar 29 2011, 10:38
Сообщение #2


Гуру
******

Группа: Участник
Сообщений: 2 072
Регистрация: 14-01-06
Пользователь №: 13 164



Извните, ассемблера не знаю. Пишу на С.
Но даже глядя на то, что вы написали - это просто уловка для перемещения программы в начало, а не сброс.

Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Mar 29 2011, 18:27
Сообщение #3


Профессионал
*****

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



Цитата(zheka @ Mar 29 2011, 14:38) *
Но даже глядя на то, что вы написали - это просто уловка для перемещения программы в начало, а не сброс.

Интересно , а что Вы понимаете под сбросом? Или Вы считаете что
Цитата
.... но я все же предпочту для перезагрузки WDT
перемещает программу куда то вдругое место ,а не на 0x0000


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Mar 29 2011, 20:05
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(ILYAUL @ Mar 29 2011, 22:27) *
Интересно , а что Вы понимаете под сбросом? Или Вы считаете что перемещает программу куда то вдругое место ,а не на 0x0000

Помимо программы и ее непосредственного исполнителя у МК как бы существует еще периферия.
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Mar 29 2011, 20:34
Сообщение #5


Профессионал
*****

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



Цитата(aaarrr @ Mar 30 2011, 00:05) *
Помимо программы и ее непосредственного исполнителя у МК как бы существует еще периферия.

Да и ещё SRAM и регистры тоже бы не помешало "почистить" при запуске, но это всё делается только программным путём. Я говорю про инит процессора и он начинается с 0x0000.
Как будет написана инициализация MK так и будет выполнятся вне зависимости что ее вызвало, если только не учитываются флаги сброса


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Mar 29 2011, 20:44
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(ILYAUL @ Mar 30 2011, 00:34) *
Как будет написана инициализация MK так и будет выполнятся вне зависимости что ее вызвало, если только не учитываются флаги сброса

Скажите, а как вы инициализируете USART, например?

И сброс как делаете - "JMP 0"?
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Mar 30 2011, 09:57
Сообщение #7


Профессионал
*****

Группа: Свой
Сообщений: 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 как тут предлагали при определённых условиях


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- 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


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 17:25
Рейтинг@Mail.ru


Страница сгенерированна за 0.01432 секунд с 7
ELECTRONIX ©2004-2016