ШИМ на тини13

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

Re: ШИМ на тини13

Сообщение BOB51 »

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

Re: ШИМ на тини13

Сообщение NISTATIN »

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

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

Re: ШИМ на тини13

Сообщение 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:
NISTATIN
Родился
Сообщения: 9
Зарегистрирован: Вт авг 07, 2012 06:59:34

Re: ШИМ на тини13

Сообщение 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;
Еще кто-то что-то про мой уровень говорит!
Просто ради одной строчки лень было справку читать!
Аватара пользователя
zero648
Вымогатель припоя
Сообщения: 650
Зарегистрирован: Пн июн 18, 2012 12:01:04
Откуда: Челябинская область, Копейск

Re: ШИМ на тини13

Сообщение 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;
}
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

Re: ШИМ на тини13

Сообщение vitalik_1984 »

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

Re: ШИМ на тини13

Сообщение zero648 »

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

Re: ШИМ на тини13

Сообщение vitalik_1984 »

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

Re: ШИМ на тини13

Сообщение eufs »

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

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

Re: ШИМ на тини13

Сообщение BOB51 »

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

Re: ШИМ на тини13

Сообщение NISTATIN »

zero648 писал(а):Это потому, что пишу все сам, библиотеками както пользоваться не привык :dont_know:


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

Re: ШИМ на тини13

Сообщение BOB51 »

NISTATIN писал(а):
zero648 писал(а):Это потому, что пишу все сам, библиотеками както пользоваться не привык :dont_know:


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


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

Re: ШИМ на тини13

Сообщение zero648 »

BOB51 писал(а):zero648
интересно, где это у 13й двухбайтовый адрес EEPROM объявился? :shock: и это при 64 байтах EEPROM :)))
ребятки не надо писать антирекламу ассемблеру и тем, кто им пользуется! 8)

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

Re: ШИМ на тини13

Сообщение zero648 »

vitalik_1984 писал(а):Да ладно лукавить, вы хотите сказать, что комментарии к своим программам всегда на английском пишете?Или это не ваша реализация в примере?

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

Re: ШИМ на тини13

Сообщение NISTATIN »

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

Re: ШИМ на тини13

Сообщение vitalik_1984 »

eufs писал(а):PS. IMHO: Tiny13 не для Си (мк может лопнуть и загадить кодом плату)

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

Re: ШИМ на тини13

Сообщение NISTATIN »

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

Re: ШИМ на тини13

Сообщение BOB51 »

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

Re: ШИМ на тини13

Сообщение zero648 »

NISTATIN писал(а):Народ подскажите пожалуйста как яркость с помощью АЦП регулировать. А то что-то никак не соображу...

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

Re: ШИМ на тини13

Сообщение vitalik_1984 »

NISTATIN писал(а):Народ подскажите пожалуйста как яркость с помощью АЦП регулировать. А то что-то никак не соображу...

Вообще смотря какую яркость вы регулируете, если какой нибудь подсветки, это одно, если яркость светодиодного табло, это другое.Может имеется ввиду регулировка яркости какого нибудь другого источника света с помощью реостата?
В общем случае работает связка ацп + шим. Неплохо было бы указать какой язык вы бы хотели использовать для программы.
В поисках истины человек развивается.
Ответить

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