Страница 233 из 304
Re: BASCOM AVR в вопросах и ответах
Добавлено: Пн авг 31, 2015 16:29:46
Tankor
edm2007 писал(а):константин_KoSS_89
P.S. А можно просто прикрутить к контроллеру обиженную женщину. Уверен, гадать на что и когда она обиделась Вы будете очень долго. Тут любой генератор случайностей отдыхает.

Это прописная истина, которая вечна.

Re: BASCOM AVR в вопросах и ответах
Добавлено: Вт сен 01, 2015 08:04:56
Мурик
Tankor писал(а):ATMega328.
Этого контроллера мало?
Это столько кода написали или есть какие-то данные, типа картинок, шрифтов и т. д.?
Re: BASCOM AVR в вопросах и ответах
Добавлено: Вт сен 01, 2015 08:27:39
Tankor
Мурик писал(а):Tankor писал(а):ATMega328.
Этого контроллера мало?
Это столько кода написали или есть какие-то данные, типа картинок, шрифтов и т. д.?
Пара картинок есть, но они маленькие. Шрифты "доделываю"родные.
Re: BASCOM AVR в вопросах и ответах
Добавлено: Пн сен 07, 2015 14:09:48
koteika
привет, а есть у кого код для софтового шима? с коментариями, так чтоб разобраться.
20 каналов хочу сделать
Re: BASCOM AVR в вопросах и ответах
Добавлено: Пн сен 07, 2015 14:34:43
edm2007
Здравствуйте.
Если Вы знаете как работает аппаратный ШИМ, то запросто напишете программный на одном таймере. Другое дело, что контроллер только и будет занят этой задачей. Лучше посмотрите в сторону BAM.
Re: BASCOM AVR в вопросах и ответах
Добавлено: Пн сен 07, 2015 15:47:00
koteika
а можно поподробнее, я новичек в этом деле, как работает шим в курсе а вот как организовать его на 20 каналов не представляю

Re: BASCOM AVR в вопросах и ответах
Добавлено: Пн сен 07, 2015 16:12:17
edm2007
Примитивно об аппаратной ШИМ: таймер молотит от 0 до максимального значения. При каждом увеличении счетного регистра его значение сравнивается со значением в регистре сравнения. Если значение счетного регистра достигло значения в регистре сравнения, то на выводе OC выставляется 1 (или 0 - зависит от того, прямой или инверсный режим настроен). При переполнении счетного регистра вывод OC сбрасывается в 0 (или выставляется в 1, опять же). Таким образом, при неизменной частоте меняется скважность. Что и требуется.
Настройте и запустите таймер по переполнению, заведите переменную счетчика (которую будете увеличивать в обработчике таймера - это будет счетный регистр), заведите 20 переменных со значениями яркости каждого канала (это будут регистры сравнения) и в обработчике сравнивайте значение счетчика со значениями каналов. Если счетчик таймера не достиг значения яркости, то на выводе выставляете 0, если равен или больше - 1. Если счетчик переполнился - сбрасываем все каналы в 0. Получится инверсный режим. Как сделать прямой, догадаться не трудно...
Re: BASCOM AVR в вопросах и ответах
Добавлено: Вт сен 08, 2015 06:49:15
koteika
спасибо, на досуге попробую

Re: BASCOM AVR в вопросах и ответах
Добавлено: Вт сен 08, 2015 15:59:38
edm2007
Думал, как бы и пример показать, и дать возможность самому написать, особо не давая готовое. И решил, а собственно, пусть это будет, во-первых, 8 каналов. А во-вторых - на Си.
Спойлер
Код: Выделить всё
//*****************************************[ОПИСАНИЕ ПРОГРАММЫ]************************************************
//
// Микроконтроллер: ATMEGA8A
// Частота: 4MHz
//
// SoftPWM 8-channel (0 - максимальная яркость, 255 - светодиод погашен)
//*************************************[ПОДКЛЮЧАЕМЫЕ ФАЙЛЫ И МАКРОСЫ]******************************************
#define F_CPU 4000000UL // тактовая частота
#include <avr/io.h> // работа с AVR
#include <avr/interrupt.h> // работа с прерываниями
#define DDR_LED DDRD // порт светодиодов
#define PORT_LED PORTD
#define LED1 PD7
#define LED2 PD6
#define LED3 PD5
#define LED4 PD4
#define LED5 PD3
#define LED6 PD2
#define LED7 PD1
#define LED8 PD0
//*****************************************[ГЛОБАЛЬНЫЕ ПЕРЕМЕННЫЕ]*********************************************
uint8_t counter = 0; // счетный регистр таймера
uint8_t bright[8] = {40, 70, 100, 150, 180, 200, 220, 250}; // значения яркости 8-ми каналов
//*********************************************[ПРЕРЫВАНИЯ]****************************************************
ISR(TIMER0_OVF_vect) // обработчик таймера 0 по переполнению
{
if (++counter == 255) // если счетчик переполнился
{
counter = 0; // сбрасываем его
PORT_LED = 0xFF; // и гасим все светодиоды
}
else // в ином случае, проверяем, какой светодиод пришло время зажечь
{
if (counter >= bright[0]) PORT_LED &= ~(1 << LED1);
if (counter >= bright[1]) PORT_LED &= ~(1 << LED2);
if (counter >= bright[2]) PORT_LED &= ~(1 << LED3);
if (counter >= bright[3]) PORT_LED &= ~(1 << LED4);
if (counter >= bright[4]) PORT_LED &= ~(1 << LED5);
if (counter >= bright[5]) PORT_LED &= ~(1 << LED6);
if (counter >= bright[6]) PORT_LED &= ~(1 << LED7);
if (counter >= bright[7]) PORT_LED &= ~(1 << LED8);
}
}
//********************************************[ОСНОВНОЙ ЦИКЛ]**************************************************
int main(void)
{
DDR_LED = 0xFF; // весь порт на выход
PORT_LED = 0xFF; // все светодиоды погашены (управляются 0)
TCCR0 |= ((0 << CS02) | (0 << CS01) | (1 << CS00)); // таймер 0: прескаллер - 1
TIMSK |= (1 << TOIE0); // прерывание по переполнению
sei(); // глобальное разрешение прерываний
while(1) // пустой основной цикл
{
}
}
//*******************************************[КОНЕЦ ПРОГРАММЫ]*************************************************
Код можно неплохо оптимизировать, но тогда наглядность исчезнет, а я именно эту цель преследовал. Ну и главное - все работает (хоть и на фото сложно яркость светодиодов передать):
Жду ответ от Вас, уже на баскоме.

Re: BASCOM AVR в вопросах и ответах
Добавлено: Вт сен 08, 2015 22:27:56
константин_KoSS_89
edm2007 Скажите а отладочная у вас случайно не самодельная, если да можно печаткой поделится.
Re: BASCOM AVR в вопросах и ответах
Добавлено: Ср сен 09, 2015 15:48:52
edm2007
Самодельнее некуда.

Но увы, канула в вечность. Шаблон для фоторезиста где-то был... На самом деле отладочная плата это очень просто. Делаем модули из того что есть (и того что нужно) на одной плате. А так как представления о нужности у каждого разные, то и плата у каждого своя.
Re: BASCOM AVR в вопросах и ответах
Добавлено: Чт сен 10, 2015 17:35:05
pavel1979
edm2007 круто!а такая ардуина
http://www.ilyichevsk.org/2010/06/metab ... b-usb.html будет работать в BASCOM AVR?если да то какой программатор выбрать в программе?
думаю поставить атмега 168
Re: BASCOM AVR в вопросах и ответах
Добавлено: Пт сен 11, 2015 15:14:55
max50
pavel1979 писал(а):если да то какой программатор выбрать в программе?
Каким будете шить, тот и выбирайте. Это по сути просто МК с обвязкой, а USB реализовано программно:
Metaboard - Arduino-совместимая плата с USB, но без USB-чипа. USB реализовано в микропрограмме ATmega, код основан на драйвере V-USB от Objective Development (на этом драйвере основаны все реализации протокола USB на AVR)
Re: BASCOM AVR в вопросах и ответах
Добавлено: Пт сен 11, 2015 18:13:54
pavel1979
Спасибо!буду искать варианты....надоело каждый раз травить новую плату...
Re: BASCOM AVR в вопросах и ответах
Добавлено: Вс сен 13, 2015 16:30:13
max50
pavel1979 писал(а):буду искать варианты
Как вариант.
Re: BASCOM AVR в вопросах и ответах
Добавлено: Вс сен 13, 2015 18:43:54
pavel1979
спасибо!
нашел схему этой ардуины,в принципе можно и самому спаять,найти бы прошивку под мегу16...

Re: BASCOM AVR в вопросах и ответах
Добавлено: Вт сен 15, 2015 17:56:23
bumbum
Как вывести зеркально байт? Есть команда или надо программно решать?
Re: BASCOM AVR в вопросах и ответах
Добавлено: Вт сен 15, 2015 18:02:37
sasha_1973
bumbum писал(а):Как вывести зеркально байт? Есть команда или надо программно решать?
Toggle Переменная_byte
Re: BASCOM AVR в вопросах и ответах
Добавлено: Вт сен 15, 2015 18:04:22
bumbum
sasha_1973 писал(а):bumbum писал(а):Как вывести зеркально байт? Есть команда или надо программно решать?
Toggle Переменная_byte
Это инвертирование, а надо зеркально- развернуть относительно центра )
Re: BASCOM AVR в вопросах и ответах
Добавлено: Вт сен 15, 2015 18:07:55
sasha_1973
Это инвертирование, а надо зеркально- развернуть относительно центра
Поменять полубайты местами?