ШИМ на тини13

Обсуждаем контроллеры компании Atmel.
Ответить
Друг Кота
Аватара пользователя
Сообщения: 15677
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

Ребятки, а зачем такой садомазохизм для простейшего устройства??! :shock:
Начнем с того, что для нормальной работы достаточно частоты ШИМ чуть более 50Гц (тогда и полевик нормально работать будет, только не забывать, что нужен с логик левел).
Второе - а ктой-нибудь наблюдал соотношение разрядности ШИМ и наблюдаемых уровней яркости? Смею заверить оно весьма нелинейно... :) Кроме того разрешающая способность ШИМ максимум 256, реально достаточно 128 шажочков. Вполне можно и программным вариантом воспользоваться - проще антидребезг кнопок получится.
Это ежли уж изворачиваться мозгам - то прикошачить в качестве выключателя ИК локатор, или самоподхват источникапитания при запуске от батарейки (с акумулятором мороки больше) :tea:
Да и на С для устройств можно разместить только 512 команд в ПЗУ (512 слов = 1 килобайт 8) ) жирновато однако... :beer:
Реклама
Родился
Сообщения: 9
Зарегистрирован: Вт авг 07, 2012 06:59:34

Сообщение NISTATIN »

zero648 писал(а):Дак эта.... проще пареной репы при изменении данной переменной сохраняем её в ЕЕПРОМ, а при инициализации вытаскиваем её оттуда :sleep:
Спасибо за ответ. Очень познавательно.
Реклама
Вымогатель припоя
Аватара пользователя
Сообщения: 650
Зарегистрирован: Пн июн 18, 2012 12:01:04
Откуда: Челябинская область, Копейск

Сообщение zero648 »

NISTATIN писал(а):
zero648 писал(а):Дак эта.... проще пареной репы при изменении данной переменной сохраняем её в ЕЕПРОМ, а при инициализации вытаскиваем её оттуда :sleep:
Спасибо за ответ. Очень познавательно.
Можно вот таким образом:
Спойлер

Код: Выделить всё

            .CSEG

При инициализации:

            ldi     YL, low(var1_RAM)   ; переменная в SRAM
            ldi     YH, high(var1_RAM)
            ldi     r17, low(var1_EP)   ; переменная в EEPROM
            ldi     r18, high(var1_EP)  ;
            call    EEPROM_read
            st     Y, r16                  ; store var1
           ....
После изменения var1:

            ldi     YL, low(var1_RAM)   ; переменная в SRAM
            ldi     YH, high(var1_RAM)
            ldi     r17, low(var1_EP)   ; переменная в EEPROM
            ldi     r18, high(var1_EP)  ;
            ld     r16, Y
            call    EEPROM_write        ; save var1
            ....


EEPROM_write:
            sbic    EECR,EEWE         ; Wait for completion of previous write
            rjmp    EEPROM_write
            out     EEARH, r18        ; Set up address (r18:r17) in address register
            out     EEARL, r17
            out     EEDR, r16         ; Write data (r16) to data register
            sbi     EECR, EEMWE       ; Write logical one to EEMWE
            sbi     EECR, EEWE        ; Start eeprom write by setting EEWE
            ret

EEPROM_read:
            sbic    EECR,EEWE         ; Wait for completion of previous write
            rjmp    EEPROM_read
            out     EEARH, r18        ; Set up address (r18:r17) in address register
            out     EEARL, r17
            sbi     EECR, EERE        ; Start eeprom read by writing EERE
            in      r16, EEDR         ; Read data from data register
            ret
           ....

            .DSEG
var1_RAM:       .db     0

            .ESEG
var1_EP:        .db     0


На С даже не проси, понятия не имею :oops:
Родился
Сообщения: 9
Зарегистрирован: Вт авг 07, 2012 06:59:34

Сообщение NISTATIN »

Можно вот таким образом:
Спойлер

Код: Выделить всё

            .CSEG

При инициализации:

            ldi     YL, low(var1_RAM)   ; переменная в SRAM
            ldi     YH, high(var1_RAM)
            ldi     r17, low(var1_EP)   ; переменная в EEPROM
            ldi     r18, high(var1_EP)  ;
            call    EEPROM_read
            st     Y, r16                  ; store var1
           ....
После изменения var1:

            ldi     YL, low(var1_RAM)   ; переменная в SRAM
            ldi     YH, high(var1_RAM)
            ldi     r17, low(var1_EP)   ; переменная в EEPROM
            ldi     r18, high(var1_EP)  ;
            ld     r16, Y
            call    EEPROM_write        ; save var1
            ....


EEPROM_write:
            sbic    EECR,EEWE         ; Wait for completion of previous write
            rjmp    EEPROM_write
            out     EEARH, r18        ; Set up address (r18:r17) in address register
            out     EEARL, r17
            out     EEDR, r16         ; Write data (r16) to data register
            sbi     EECR, EEMWE       ; Write logical one to EEMWE
            sbi     EECR, EEWE        ; Start eeprom write by setting EEWE
            ret

EEPROM_read:
            sbic    EECR,EEWE         ; Wait for completion of previous write
            rjmp    EEPROM_read
            out     EEARH, r18        ; Set up address (r18:r17) in address register
            out     EEARL, r17
            sbi     EECR, EERE        ; Start eeprom read by writing EERE
            in      r16, EEDR         ; Read data from data register
            ret
           ....

            .DSEG
var1_RAM:       .db     0

            .ESEG
var1_EP:        .db     0


На С даже не проси, понятия не имею :oops:[/quote]
и это проще паренной репы??????
проще паренной репы вот как
eeprom unsigned char i;
Еще кто-то что-то про мой уровень говорит!
Просто ради одной строчки лень было справку читать!
Реклама
Эиком - электронные компоненты и радиодетали
Вымогатель припоя
Аватара пользователя
Сообщения: 650
Зарегистрирован: Пн июн 18, 2012 12:01:04
Откуда: Челябинская область, Копейск

Сообщение zero648 »

NISTATIN писал(а): eeprom unsigned char i;
И что дальше с этим делать? :dont_know:

:))) А это что по-твоему? Из даташита:

C Code Example
void EEPROM_write(unsigned int uiAddress, unsigned char ucData)
{
/* Wait for completion of previous write */
while(EECR & (1<<EEPE))
;
/* Set up address and data registers */
EEAR = uiAddress;
EEDR = ucData;
/* Write logical one to EEMPE */
EECR |= (1<<EEMPE);
/* Start eeprom write by setting EEPE */
EECR |= (1<<EEPE);
}


C Code Example
unsigned char EEPROM_read(unsigned int uiAddress)
{
/* Wait for completion of previous write */
while(EECR & (1<<EEWE))
;
/* Set up address register */
EEAR = uiAddress;
/* Start eeprom read by writing EERE */
EECR |= (1<<EERE);
/* Return data from data register */
return EEDR;
}
Реклама
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень

Сообщение vitalik_1984 »

zero648 , для код вижна строчки достаточно то есть объявив переменную в еепром вы можете обращаться как к обычной переменой и она там будет всегда.
Кв сам использует необходимые операции,необходимые для работы с еепром
Чего нельзя сказать про обычный си например в Авр студии нужно пользоваться специальными функциями реализацию которых вы привели.
В поисках истины человек развивается.
Контактная информация:
Реклама
Вымогатель припоя
Аватара пользователя
Сообщения: 650
Зарегистрирован: Пн июн 18, 2012 12:01:04
Откуда: Челябинская область, Копейск

Сообщение zero648 »

Это потому, что пишу все сам, библиотеками както пользоваться не привык :dont_know:
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень

Сообщение vitalik_1984 »

Да ладно лукавить, вы хотите сказать, что комментарии к своим программам всегда на английском пишете?Или это не ваша реализация в примере?
В поисках истины человек развивается.
Контактная информация:
Опытный кот
Сообщения: 772
Зарегистрирован: Вс апр 10, 2011 02:24:06
Откуда: г.Северодонецк

Сообщение eufs »

zero648 писал(а):Дак эта.... проще пареной репы при изменении данной переменной сохраняем её в ЕЕПРОМ, а при инициализации вытаскиваем её оттуда :sleep:
Только не забываем, что нулевой адрес в еепром лучше не использовать. И еще - надо всегда обнулять регистр адреса еепром после обращения.
PS. IMHO: Tiny13 не для Си (мк может лопнуть и загадить кодом плату)
C0FFEE=‭12648430‬
Друг Кота
Аватара пользователя
Сообщения: 15677
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

zero648
интересно, где это у 13й двухбайтовый адрес EEPROM объявился? :shock: и это при 64 байтах EEPROM :)))
ребятки не надо писать антирекламу ассемблеру и тем, кто им пользуется! 8)
Родился
Сообщения: 9
Зарегистрирован: Вт авг 07, 2012 06:59:34

Сообщение NISTATIN »

zero648 писал(а):Это потому, что пишу все сам, библиотеками както пользоваться не привык :dont_know:
Может Вам тогда стоит свой собственный микроконтроллер разработать и сразу его двоичным кодом программировать, чтоб не пользоваться чужими наработками?
Друг Кота
Аватара пользователя
Сообщения: 15677
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

NISTATIN писал(а):
zero648 писал(а):Это потому, что пишу все сам, библиотеками както пользоваться не привык :dont_know:
Может Вам тогда стоит свой собственный микроконтроллер разработать и сразу его двоичным кодом программировать, чтоб не пользоваться чужими наработками?
зазря на коллег "бочку гоним" - библиотеки программных модулей хороши для готовой системы или для хорошо проработанных однотипных схемных решений, весьма полезны в ПК (под управлением операционной системы, под Си или другие "высокоуровневые" языки) но для самостоятельного собственного проектирования предпочтение отдается "библиотеке" алгоритмов, а не конкретных кодов - текстовка создается под конкретную ситуацию (схему и ее функционал) 8)
когда свое устройство делать будеш с подбором того чего под руками валяется и с постановкой собственной задачи да под асмом - иной раз даже свои старые решения "покромсать" прийдется :beer:
а от типовых решений тоже не уйдеш - разводка микросхем определена изготовителем те же логика-рассыпуха, регистры, силовые драйвера (uln2803), устройства микроLAN, I2C - пэотому и подобные фрагменты кодов не исключение, но именно подобные - всегда возможны вариации построения с удалением или обходом некоторых фрагментов на видоизмененные для данного случая :sleep:
если уж и Си, то с умением писать собственные библиотеки 8)
Вымогатель припоя
Аватара пользователя
Сообщения: 650
Зарегистрирован: Пн июн 18, 2012 12:01:04
Откуда: Челябинская область, Копейск

Сообщение zero648 »

BOB51 писал(а):zero648
интересно, где это у 13й двухбайтовый адрес EEPROM объявился? :shock: и это при 64 байтах EEPROM :)))
ребятки не надо писать антирекламу ассемблеру и тем, кто им пользуется! 8)
Извиняйте :oops: , чет я не подумал, что пример человеку нужен именно для его чипа, просто выдрал куски из своего старого проекта на меге16 чисто для примера, как это делается на асме.
Вымогатель припоя
Аватара пользователя
Сообщения: 650
Зарегистрирован: Пн июн 18, 2012 12:01:04
Откуда: Челябинская область, Копейск

Сообщение zero648 »

vitalik_1984 писал(а):Да ладно лукавить, вы хотите сказать, что комментарии к своим программам всегда на английском пишете?Или это не ваша реализация в примере?
Ничего здесь удивительного нет, просто когда только осваивал АВРки выдирал код из даташитов, некоторые из примеров протеуса. Коментарии пишу как на русском так и на английском, бывает иногда, что на английском информативность коментария больше при меньшем количестве слов, чем на русском.
Родился
Сообщения: 9
Зарегистрирован: Вт авг 07, 2012 06:59:34

Сообщение NISTATIN »

А кто подскажет как совместить эту прошивку со штатной регулировкой яркости в мониторе?
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень

Сообщение vitalik_1984 »

eufs писал(а): PS. IMHO: Tiny13 не для Си (мк может лопнуть и загадить кодом плату)
Ну конечно.Все нормально компилируется на си.Главное библиотеки с плавающей точкой не пользовать и спринт ф какой нибудь.
Конечно если требовать от тини13 сотни функций лучше на асме написать.
В поисках истины человек развивается.
Контактная информация:
Родился
Сообщения: 9
Зарегистрирован: Вт авг 07, 2012 06:59:34

Сообщение NISTATIN »

Народ подскажите пожалуйста как яркость с помощью АЦП регулировать. А то что-то никак не соображу...
Друг Кота
Аватара пользователя
Сообщения: 15677
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

:)))
с помощью АЦП и фотоэлемента получают данные о текущей освещенности, а как и чем эту освещенность регулировать - другая часть задачи 8)
есть правда еще кнопки через АЦП...как вариант... (мне не очень нравится)
Вымогатель припоя
Аватара пользователя
Сообщения: 650
Зарегистрирован: Пн июн 18, 2012 12:01:04
Откуда: Челябинская область, Копейск

Сообщение zero648 »

NISTATIN писал(а):Народ подскажите пожалуйста как яркость с помощью АЦП регулировать. А то что-то никак не соображу...
Может, все таки, ЦАП для этого подойдет? АЦП только для сбора информации.
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень

Сообщение vitalik_1984 »

NISTATIN писал(а):Народ подскажите пожалуйста как яркость с помощью АЦП регулировать. А то что-то никак не соображу...
Вообще смотря какую яркость вы регулируете, если какой нибудь подсветки, это одно, если яркость светодиодного табло, это другое.Может имеется ввиду регулировка яркости какого нибудь другого источника света с помощью реостата?
В общем случае работает связка ацп + шим. Неплохо было бы указать какой язык вы бы хотели использовать для программы.
В поисках истины человек развивается.
Контактная информация:
Ответить

Вернуться в «AVR»