Администрация форума не несёт ответственности за достоверность информации и оставляет за собой право редактировать или в особых случаях даже удалять посты без предупреждения. Спасибо за понимание.

Программирование ATMEL в BASCOM.

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Программирование ATMEL в BASCOM. » Вопросы - ответы » Powersave - энерго сбережение


Powersave - энерго сбережение

Сообщений 31 страница 60 из 63

31

qewin написал(а):

В общем  я мучаю 88 атмегу  на 48 не работает ( стоит пока в работе за окном на "собаке") сделаю еще платку для 328

У вас $regfile = "m88def.dat".
Попробуйте $regfile = "m88adef.dat"

У меня в большинства случаев при компиляции и прошивке без "а" ATMega48A и ...328А неправильно работали.
Сейчас внимательно читаю надписи на корпусах, т.к. в наличии есть МК без "А".

0

32

Я сейчас полностью переработал свой проект. Жду детальки, придут, оформлю красиво, выложу. Чёт китайцы тормозят с доставкой. В части термодатчика, изменился только процесс коррекции температуры.  Всё остальное то-же.

0

33

qewin написал(а):

В общем  я мучаю 88 атмегу  на 48 не работает


Не работает что именно, у Вас Timer2 в асинхронном режиме и работает от кварца, секундочки тикают, если да, идём дальше ?

! В старых ревизиях Atmega есть отличия по конфигурации режимов пониженного потребления !

Если работают часики, пробуйте засыпать сначала в "idle", затем в "PowerSave". С выводом в терминал или на LCD.

Если всё работает, начнём разбираться с nrf24l01 и общим потреблением.

Повторюсь, всё должно работать с потреблением ~ 1 микро Ампер

0

34

kip написал(а):

Протеусом пользуетесь? Попробуйте пошагово пройти процесс замера и вычисления и посмотрите в протеусе, что происходит.

Нет не пользовался , подумал об этом.

0

35

sasha_1973 написал(а):

qewin написал(а):

    В общем  я мучаю 88 атмегу  на 48 не работает

Не работает что именно, у Вас Timer2 в асинхронном режиме и работает от кварца, секундочки тикают, если да, идём дальше ?


На 48 пишу что не работает , она не выходит из сна. На 328 и 88 все нормально.

В общем, Александр  вопрос  с со сном пока решен и сбережение до  20 uA ( меня устраивает , позже плату посмотрю почище сделаю и посмотрю что где утекает) .
Остается найти, почему снятие температуры не правильны! Ведь если снести ( код Powersave )  то все работает как часы!   Спасибо однозначно за код что Вы прислали , но , мне он не подходит у меня программа и платы сделаны под себя  :surprise: .

Всех с праздником  Христос Воскрес !

0

36

qewin написал(а):

мне он не подходит у меня программа и платы сделаны под себя


Поменять выводы в исходнике, и всё.

Код работает на Atmega_48_88_168_328

0

37

qewin написал(а):

На 48 пишу что не работает , она не выходит из сна. На 328 и 88 все нормально.


Как вариант, битая мега.

0

38

Все задача решилась  :jumping: . sasha_1973 Приношу свои извинения что порылся в вашем коде ( кое что убрал и думаю можно еще оптимизировать ) и добавил функцию " jmp 0 "  принудительного сброса МК  ( вроде так обзывается) и заработало  :flag: . Значит все таки какие то "заряженные"  регистры  не давали снять замер, теперь после сна происходит сброс МК и чистое прохождение программы замер - передача и потом спать ( от 8 сек до 145 час мне достаточно  :yep: ) .
Если я что то не так выражаю мысль, прошу сильно не пинать . Выкладываю полный исходник для Atmega 88 ,  для этих проверю позже 48/328.
Спасибо всем, думаю кто добавит и другие варианты и изменения в сторону " уменьшинезации" будет хорошо.

Код:
$regfile = "m88adef.dat"
$crystal = 8000000
$baud = 19200
$hwstack = 40
$swstack = 20
$framesize = 40


 Config Timer2 = TIMER , Async = On , Prescale = 1024       ' Делитель 32768 / 1024 / 256 = 8 сек (прерывание TIMER2 = 1 раз в 8 сек)
  On Timer2 Обработка_прерывания_timer2_word Nosave       ' Ссылка на подпрограмму обработчика прерывания TIMER2
  Dim Таймер As Word
  Dim Значение_таймера As Word

  Значение_таймера = 3      ' 1=8 сек  необходимое время сна  * (f кварца / Prescale / 256) (в секундах)
   Таймер = Значение_таймера
    Assr.3 = 1 : Waitms 100
    Const Значение_powersave = &B_0000_0111

  Enable Timer2
  Enable Interrupts


'=== Declare sub routines
Declare Sub R_register(byval Command As Byte , Byval C_bytes As Byte)
Declare Sub W_register(byval C_bytes As Byte)

'=== Constante ===
'Define nRF24L01 interrupt flag's
Const Idle_int = &H00                                       'Idle, no interrupt pending
Const Max_rt = &H10                                         'Max #of Tx Retrans Interrupt
Const Tx_ds = &H20                                          'Tx Data Sent Interrupt
Const Rx_dr = &H40                                          'Rx Data Received

'SPI(nRF24L01) commands

Const Read_reg = &H00                                       'Define Read Command To Register
Const Write_reg = &H20                                      'Define Write Command To Register
Const Rd_rx_pload = &H61                                    'Define Rx Payload Register Address
Const Wr_tx_pload = &HA0                                    'Define Tx Payload Register Address
Const Flush_tx = &HE1                                       'Define Flush Tx Register Command
Const Flush_rx = &HE2                                       'Define Flush Rx Register Command
Const Reuse_tx_pl = &HE3                                    'Define Reuse Tx Payload Register Command
Const Nop_comm = &HFF                                       'Define No Operation , Might Be Used To Read Status Register
'SPI(nRF24L01) registers(addresses)
Const Config_nrf = &H00                                     'Config' register address
Const En_aa = &H01                                          'Enable Auto Acknowledgment' register address
Const En_rxaddr = &H02                                      'Enabled RX addresses' register address
Const Setup_aw = &H03                                       'Setup address width' register address
Const Setup_retr = &H04                                     'Setup Auto. Retrans' register address
Const Rf_ch = &H05                                          'RF channel' register address
Const Rf_setup = &H06                                       'RF setup' register address
Const Status = &H07                                         'Status' register address
Const Observe_tx = &H08                                     'Observe TX' register address
Const Cd = &H09                                             'Carrier Detect' register address
Const Rx_addr_p0 = &H0A                                     'RX address pipe0' register address
Const Rx_addr_p1 = &H0B                                     'RX address pipe1' register address
Const Rx_addr_p2 = &H0C                                     'RX address pipe2' register address
Const Rx_addr_p3 = &H0D                                     'RX address pipe3' register address
Const Rx_addr_p4 = &H0E                                     'RX address pipe4' register address
Const Rx_addr_p5 = &H0F                                     'RX address pipe5' register address
Const Tx_addr = &H10                                        'TX address' register address
Const Rx_pw_p0 = &H11                                       'RX payload width, pipe0' register address
Const Rx_pw_p1 = &H12                                       'RX payload width, pipe1' register address
Const Rx_pw_p2 = &H13                                       'RX payload width, pipe2' register address
Const Rx_pw_p3 = &H14                                       'RX payload width, pipe3' register address
Const Rx_pw_p4 = &H15                                       'RX payload width, pipe4' register address
Const Rx_pw_p5 = &H16                                       'RX payload width, pipe5' register address
Const Fifo_status = &H17                                    'FIFO Status Register' register address


Dim D_bytes(33) As Byte , B_bytes(33) As Byte               'Dim the bytes use for SPI, D_bytes = outgoing B_bytes = Incoming
Dim Temp As Byte , W As Word
Dim Term As Word , Term_t As Word , T As Byte , Tt As Dword
Dim Ubat As Word
Dim Ux As Dword
Dim Ubat_(2) As Byte At Ubat Overlay
Dim Ter As Integer
Dim Term_(2) As Byte At Ter Overlay
Config Portd.5 = Output : U_24l01 Alias Portd.5 : Set U_24l01
Config Portc.3 = Output : U_term Alias Portc.3

delaem:

'=== Config hardware ===
Config Spi = Hard , Interrupt = Off , Data Order = Msb , Master = Yes , Polarity = Low , Phase = 0 , Clockrate = 16 , Noss = 1

'Software SPI is NOT working with the nRF24L01, use hardware SPI only, but the SS pin must be controlled by our self

Config Pind.7 = Output                                      'CE pin is output
Config Pinb.2 = Output                                      'SS pin is output
Config Pind.6 = Input                                       'IRQ pin is input

 Ce Alias Portd.7
 Ss Alias Portb.2
 Irq Alias Pind.6

Spiinit                                                     'init the spi pins

Set Ce
Waitms 10                                                   'Wait a moment until all hardware is stable
Reset Ce                                                    'Set CE pin low
Reset Ss                                                    'Set SS pin low (CSN pin)

 D_bytes(1) = Flush_tx                                      'Flush the TX_fifo buffer
Call W_register(1)
 D_bytes(1) = Write_reg + Status                            'Reset the IRQ bits
 D_bytes(2) = &B00110000
Call W_register(2)


Set U_term                                                  'Включаем датчик температуры

Config Adc = Single , Prescaler = 128 , Reference = Internal
 Start Adc

Term = Getadc(2)
For T = 1 To 30                                             'Цыкл измерения температуры
Term = Getadc(2)
Term_t = Term_t + Term
Next
Reset U_term
Term = Term_t / 30

   Ux = Term * 1059
   Tt = Ux / 1000
   Term = Tt
   Ter = Term - 500


Config Adc = Single , Prescaler = 128 , Reference = Avcc    'Конфегурация АЦП
   Ubat = Getadc(14)
   Ux = 117000 / Ubat
   Ubat = Ux
Config Adc = Single , Prescaler = 128 , Reference = Internal   ' Переключаем опорку что бы конденсатор на Aref успел разрядится
Stop Adc

 '==============================================================================

Gosub Setup_tx                                              'Setup the nrf24l01 for TX
D_bytes(1) = Wr_tx_pload                                    'Put 5 bytes in the TX pload buffer
D_bytes(2) = Ter                                           'Байт 2
D_bytes(3) = Term_(1)                                       'Байт 3
D_bytes(4) = Term_(2)                                       'Байт 4
D_bytes(5) = Ubat                                           'Байт 5
D_bytes(6) = 1                                              'Packet_count
Call W_register(6)                                          'Write 6 bytes to register

Waitms 2
Set Ce                                                      'Set CE for a short moment to transmit the fifo buffer
Waitms 1                                                    
Reset Ce                                                    

Reset U_24l01
Reset U_term
Portd = 0 : Portb = 0 : Portc = 0

 Главный_цикл:


 If Таймер = 0 Then
  Gosub delaem
 Таймер = Значение_таймера
  Else
   
   Gosub Тихий_час
 End If

Goto Главный_цикл
End

Return


 '=== Sub routines ===
Sub W_register(byval C_bytes As Byte)                       'Write register with SPI
Reset Ss                                                    'Manual control SS pin, set SS low before shifting out the bytes
 Spiout D_bytes(1) , C_bytes                                'Shiftout the data bytes trough SPI , C_bytes is the amount bytes to be written
Set Ss                                                      'Set SS high
End Sub

Sub R_register(byval Command As Byte , Byval C_bytes As Byte) As Byte       'C_bytes = Count_bytes, number off bytes to be read
Reset Ss                                                    'Manual controle SS pin, set low before shifting in/out the bytes
Spiout Command , 1                                         'First shiftout the register to be read
Spiin B_bytes(1) , C_bytes                                 'Read back the bytes from SPI sended by nRF20L01
Set Ss                                                      'Set SS back to high level
End Sub



Setup_tx:                                                   'Setup for TX

 D_bytes(1) = Write_reg + Tx_addr                           'TX adress
 D_bytes(2) = &H34
 D_bytes(3) = &H43
 D_bytes(4) = &H10
 D_bytes(5) = &H10
 D_bytes(6) = &H01
Call W_register(6)
 D_bytes(1) = Write_reg + Rx_addr_p0                        'RX adress for pipe0
 D_bytes(2) = &H34
 D_bytes(3) = &H43
 D_bytes(4) = &H10
 D_bytes(5) = &H10
 D_bytes(6) = &H01
Call W_register(6)
 D_bytes(1) = Write_reg + En_aa                             'Enable auto ACK for pipe0
 D_bytes(2) = &H01
Call W_register(2)
 D_bytes(1) = Write_reg + En_rxaddr                         'Enable RX adress for pipe0
 D_bytes(2) = &H01
Call W_register(2)
 D_bytes(1) = Write_reg + Rf_ch                             'Set RF channel
 D_bytes(2) = 40
Call W_register(2)
 D_bytes(1) = Write_reg + Rf_setup                          'Setup RF-> Output power 0dbm, datarate 2Mbps and LNA gain on
 D_bytes(2) = &H06
Call W_register(2)
 D_bytes(1) = Write_reg + Config_nrf                        'Setup CONFIG-> PRX=0(TX_device), PWR_UP=1, CRC 2bytes, Enable CRC
 D_bytes(2) = &H0E
Call W_register(2)

Return


'===============================================================================
  Тихий_час:
'-------------------------------------------------------------------------------
    Acsr.acd = 1       'Выключаем компаратор (именно записью "1", смотреть документацию), слишком много потребляет
    Ucsr0b.rxen0 = 1   'Выключаем приемник USART, слишком много потребляет
    Ucsr0b.txen0 = 1   'Выключаем передатчик USART, слишком много потребляет
    Adcsra.aden = 1    'Выключаем АЦП, слишком много потребляет

    Portd = 0 : Portb = 0 : Portc = 0
    Adcsr = &B00010000

    Enable Timer2       
    Enable Interrupts       

    '###########################
   Экстренная_остановка:
   'Только так, иначе может не проснуться
    If Assr.tcn2ub > 0 And Assr.ocr2aub > 0 And Assr.tcr2aub > 0 And Assr.ocr2bub > 0 And Assr.tcr2bub > 0 Then
        nop
        Goto Экстренная_остановка
    End If

    !ldi R16 ,  Значение_powersave       'Выставляем,как будем спать
    !sts SMCR , R16       'Пишем в регистр

    !sleep       'Отправляемся спать
'###########################

    If Таймер > 0 Then
        Goto Экстренная_остановка
    End If

    Waitms 10       'Ждем пока все проснутся
    jmp 0             ' Сброс регистров, перезагрузка МК   < < < --------------

'-------------------------------------------------------------------------------
  Return

  Обработка_прерывания_timer2_word:
'-------------------------------------------------------------------------------
    !push R16
    !in R16 , sreg
    !push R16
    !push R30
    !push R31

    !lds R30 , {Таймер}
    !lds R31 , {Таймер + 1}

    !cpi R31 , 0
    !ldi R16 , 0
    !cpc R30 , R16
    !brcs Выход_прерывания_timer2_word
    !breq Выход_прерывания_timer2_word
    !rjmp Считаем_таймер
    !rjmp Выход_прерывания_timer2_word

   Считаем_таймер:
    !sbiw R30 , 1

    !sts {Таймер} , R30
    !sts {Таймер + 1} , R31

   Выход_прерывания_timer2_word:
    !pop R31
    !pop R30
    !pop R16
    !out sreg , R16
    !pop R16

    !reti
'-------------------------------------------------------------------------------
  Return
'===============================================================================

Отредактировано qewin (2019-04-28 21:14:05)

0

39

qewin написал(а):

Все задача решилась
...
Выкладываю полный исходник для Atmega 88 ,  для этих проверю позже 48/328.

Код:
$regfile = "m88adef.dat"

Таки буквочка "а" появилась отчего ?
Изменения были ?

Отредактировано Nord (2019-04-28 21:31:45)

0

40

Добрый вечер Nord, осталась "буквочка" , после испытаний с ней или без нее  ничего не дает!

Отредактировано qewin (2019-04-28 21:34:55)

0

41

qewin написал(а):

Добрый вечер Nord, осталась "буквочка" , после испытание с ней или без нее  ничего не дает!

Я бы все-таки в regfile прописывал истинный МК, согласно "буквочек" на корпусе... ;)

0

42

Nord написал(а):

qewin написал(а):

    Добрый вечер Nord, осталась "буквочка" , после испытание с ней или без нее  ничего не дает!

Я бы все-таки в regfile прописывал истинный МК, согласно "буквочек" на корпусе... ;)

Я сколько с Вами общаюсь , понял что вы за чистоту написания !  :writing:

0

43

qewin написал(а):

Я сколько с Вами общаюсь , понял что вы за чистоту написания !

Пусть это будем называть так ;) , но я уже сталкивался, когда "regfile = "m48pdef.dat" (без "а") в железе с ATMega48A начинает гнать "не по-децки"... ;)
"Железный" I2C, например...

Отредактировано Nord (2019-04-28 21:47:04)

0

44

Nord написал(а):

qewin написал(а):

    Я сколько с Вами общаюсь , понял что вы за чистоту написания !

Пусть это будем называть так ;) , но я уже сталкивался, когда "regfile = "m48pdef.dat" (без "а") в железе с ATMega48A начинает гнать "не по-децки"... ;)
"Железный" I2C, например...

Спасибо, Nord буду знать!  :yep:

+1

45

qewin написал(а):

Все задача решилась,  добавил функцию " jmp 0 "  принудительного сброса МК  ( вроде так обзывается) и заработало   . Значит все таки какие то "заряженные"  регистры  не давали снять


Если заработало и Вам нравится, просто ЗАМЕЧАТЕЛЬНО !

НО

JMP 0   -   Это называется костыль ! Очищается только оперативка, аппаратные регистры не трогаются.

В чём прелесть PowerSave и Powerdown
МК не сбрасывается, т.е., все регистры и данные остаются в целости и сохранности, т.е., именно так, ка ВЫ их настроили !

Например счётчик трансляций, в Вашем варианте кроме записи в eeprom Вы его нигде не сохраните (разве что в аппаратных регистрах), вся оперативка очищается.


Первое сообщение

qewin написал(а):

у меня затык может не туда  (    'Делаете то, что Вам надо ) запускаю , зажимает или обрубает регистры не правильно считывает температур


температура не правильно считывается, потому, что  Вы не очищаете накопительную переменную "Term_t", в итоге при последующих измерениях Вы к предыдущим замерам  прибавляете все последующие



Моё видение алгоритма исходника:

Настройка всего аппаратного, которое необходимо в МК

Таймер = Значение_таймера

главный_цикл:

    If Таймер > 0 Then
        Powersave
      Else
        Gosub Замер_трансляция
        Таймер = Значение_таймера
    End If

Goto главный_цикл

'========================
Замер_трансляция:
'-------------------------------------------

Замер температуры
Передача в эфир
Подготовка аппаратного обеЗпечения ко сну (порты на вход/выход; подтяжки к нужным уровням)

'-------------------------------------------
Return
'========================

0

46

Привет всем. Сделал новую платку, поставил Smd Nrf24l01  и на 328 меге работает отлично, энергосбережение  0.98 uA !

http://s5.uploads.ru/t/JtbrL.jpg

+1

47

Пока не знаю  :no:  почему, но  48 и 168 с этим кодом из сна не выходят!  88 и 328 все отлично.

0

48

qewin написал(а):

48 и 168 с этим кодом из сна не выходят!


При каком Vcc именно на выводах питания МК ?

Может поэтому, стр.3
8280A-AVR-12/09

http://s5.uploads.ru/t/G8Egb.jpg

0

49

sasha_1973 написал(а):

qewin написал(а):

    48 и 168 с этим кодом из сна не выходят!

При каком Vcc именно на выводах питания МК ?


Vcc 2.7-3.0v  ( Recommended Range for Capacitors C1 and C2 (pF)  ставлю обычно 18-22пф , но и по "даташи" пробовал 9-22пф ) результата никакого .

0

50

JMP 0   -   Это называется костыль ! Очищается только оперативка, аппаратные регистры не трогаются.

И где костыль?
А если "побаловаться" вот такими плюшками с маком: noinit, noramclear или initmicro.
Да и вообще, стоило бы раздезить сначала инициализатор проца а уж потом что-то конкретно утверждать.

0

51

-NMi- написал(а):

И где костыль?
А если "побаловаться" вот такими плюшками с маком: noinit, noramclear или initmicro.
Да и вообще, стоило бы раздезить сначала инициализатор проца а уж потом что-то конкретно утверждать.


И где ты увидел реализацию вышеприведённых команд в выше представленном исходнике ?

Всё давно уже -"раздезить", так что, представляю, что пишу и говорю !

P.S.
Последнее китайское предупреждение !
Не образумишься (по существу и нормальным слогом), забаню нахрен, прошу прощения за мой русский !

0

52

qewin

Для чего я Вам выложил табличку, Вы пробовали тайминги изменить ?

0

53

sasha_1973 написал(а):

qewin

Для чего я Вам выложил табличку, Вы пробовали тайминги изменить ?


Если бы я понимал, что Вы от меня просите ( нет, ну тайминги в программе то понятно, но, ......)  .  Жирновато использовать 5% памяти 328 на занятой памяти , но она работает и я что-то уже "забил" что либо  дальше ковырять!

Отредактировано qewin (2019-05-08 20:38:07)

0

54

sasha_1973 написал(а):

И где ты увидел реализацию вышеприведённых команд в выше представленном исходнике ?

Всё давно уже -"раздезить", так что, представляю, что пишу и говорю !

Я боюсь, что их знает на этом форуме - единицы, команды эти.
По поводу "костыля" ты совершенно не прав! Будет то-же самое, что и Res, Bod или Wdt... да только без "отметки" откуда это пришло, но, разобраться можно и запросто.
Да, регистры "останутся" целыми до входа в Init Bascom И ОН ВСЁ!!! РЕГИСТРЫ И ПАМЯТЬ (если ramclear) ПРИВЕДЁТ В ИСХОДНОЕ СОСТОЯНИЕ вне зависимости откуда прилетел JMP 0  или Reset или что иное, приводящее к оному!!!!!!!!!
ОСТАЛЬНОЕ ОН НЕ!!! ТРОНЕТ!!! в точности с Config !!! Что в Config прописано - то он и ТРОНЕТ!!!   Больше НИЧЕГО!!!

Ну, давай исходник, я дизассемблирую (раздезю) и посмотрим, кто прав, а кто нет...

0

55

-NMi- написал(а):

ОН ВСЁ!!! РЕГИСТРЫ И ПАМЯТЬ (если ramclear) ПРИВЕДЁТ В ИСХОДНОЕ СОСТОЯНИЕ

Баском проводит начальную инициализацию, а это не значит что все регистры приводятся в исходное состояние.

-NMi- написал(а):

Ну, давай исходник, я дизассемблирую

С этого нужно было начинать прежде чем писать.

0

56

-NMi- написал(а):

Ну, давай исходник, я дизассемблирую (раздезю) и посмотрим, кто прав, а кто нет...


Держи

$regfile = "m328pdef.dat"
  $crystal = 1000000
  $framesize = 128
  $hwstack = 128
  $swstack = 128

  Dim Val_byte As Byte
  Val_byte = 128

  Do

    Ocr0b = 210
    Ocr2a = 123
    Ocr1a = 4321

    !jmp 0

  Loop
End

Убеждайся, что переменная обнулится, а регистры останутся нетронутыми.

Не забудь подтверждение выложить !

0

57

qewin написал(а):

Если бы я понимал, что Вы от меня просите ( нет, ну тайминги в программе то понятно, но, ......)


В табличке написано, сколько времени ждать запуска TIMER2.

т.е., после старта таймера, ждём ~3000 ms, пока раскачается кварц, потом идём дальше.

qewin написал(а):

Жирновато использовать 5% памяти 328 на занятой памяти


Повторюсь в очередной раз, всё работает на Atmega_48_88_168_328, с буквами и беЗ.

qewin написал(а):

но она работает и я что-то уже "забил" что либо  дальше ковырять!


Пипец, а как же спортивный интерес ?

0

58

-NMi- написал(а):

Будет то-же самое, что и Res, Bod или Wdt... да только без "отметки" откуда это пришло, но, разобраться можно и запросто.


Как определить причину сброса МК

Если нужно ребутнуть МК

Config Watchdog = 32       '16; 32; 64; 128; 256; 512; 1024; 2048; 4096; 8192   -  время в ms
    Start Watchdog
    Reset Watchdog
    Wait 1

Полная версия исходника

0

59

http://sh.uploads.ru/6hLxe.jpg

Поехали...
Красным выделена инициализация стэка и указателей (2 шт) баскома.
Зелёный - собсна работа с WDR , баском оставляет "обрезок" WDR в R0 всегда!
Синий - это заполнение (обнуление) памяти, читай - переменных (это если ramclear)

Всё, стандартная процедура старта процессора (по умолчанию) так выглядит ВСЕГДА!

0

60

http://s7.uploads.ru/sjPHJ.jpg

Продолжаем...
Красный - это собственно инициализация твоей переменной.
Зелёный - это, собственно, и есть Config, только ты его "напрямую" в регистры "суёшь"

Ну, теперь, собственно и мой вопрос - где "костыль" ???  Баском подготовил абсолютно ВСЕ необходимые для него регистры при начальной инициализации и будет это всё работать, как я и писал выше, что хоть от Reset-а , что от JMP 0 абсолютно одинаково!

0


Вы здесь » Программирование ATMEL в BASCOM. » Вопросы - ответы » Powersave - энерго сбережение