Страница 233 из 304

Re: BASCOM AVR в вопросах и ответах

Добавлено: Пн авг 31, 2015 16:29:46
Tankor
edm2007 писал(а):константин_KoSS_89
P.S. А можно просто прикрутить к контроллеру обиженную женщину. Уверен, гадать на что и когда она обиделась Вы будете очень долго. Тут любой генератор случайностей отдыхает. :tea:
Это прописная истина, которая вечна. 8)

Re: BASCOM AVR в вопросах и ответах

Добавлено: Вт сен 01, 2015 08:04:56
Мурик
Tankor писал(а):ATMega328.
Этого контроллера мало? :shock: :shock:
Это столько кода написали или есть какие-то данные, типа картинок, шрифтов и т. д.?

Re: BASCOM AVR в вопросах и ответах

Добавлено: Вт сен 01, 2015 08:27:39
Tankor
Мурик писал(а):
Tankor писал(а):ATMega328.
Этого контроллера мало? :shock: :shock:
Это столько кода написали или есть какие-то данные, типа картинок, шрифтов и т. д.?
Пара картинок есть, но они маленькие. Шрифты "доделываю"родные.

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
спасибо, на досуге попробую :beer:

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)                                    // пустой основной цикл
 	{

	}
}

//*******************************************[КОНЕЦ ПРОГРАММЫ]*************************************************
Код можно неплохо оптимизировать, но тогда наглядность исчезнет, а я именно эту цель преследовал. Ну и главное - все работает (хоть и на фото сложно яркость светодиодов передать):

Изображение

Жду ответ от Вас, уже на баскоме. :tea:

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
Это инвертирование, а надо зеркально- развернуть относительно центра


Поменять полубайты местами?