проблема с управлением RGB диодами через ATTiny13A

Обсуждаем контроллеры компании Atmel.
Ответить
Родился
Сообщения: 10
Зарегистрирован: Чт янв 16, 2014 04:35:27

Сообщение pe4en »

На основе данной статьи http://cxem.net/mc/mc106.php пытался немного усложнить схему и сделал следующую (
Спойлер
mc106-1.png
(9.22 КБ) 180 скачиваний
). На CodeVisionAVR написал следующий код
Спойлер

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

/*****************************************************
This program was produced by the
CodeWizardAVR V1.24.8d Professional
Automatic Program Generator
© Copyright 1998-2006 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com

Project : 
Version : 
Date    : 15.01.2014
Author  : F4CG                            
Company : F4CG                            
Comments: 


Chip type           : ATtiny13
Clock frequency     : 4,000000 MHz
Memory model        : Tiny
External SRAM size  : 0
Data Stack size     : 16
*****************************************************/

#include <tiny13.h>
#include <delay.h>

// Declare your global variables here

void main(void)
{
// Declare your local variables here

// Crystal Oscillator division factor: 1
#pragma optsize-
CLKPR=0x80;
CLKPR=0x00;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif

// Input/Output Ports initialization
// Port B initialization
// Func5=In Func4=In Func3=In Func2=In Func1=Out Func0=Out 
// State5=T State4=T State3=T State2=T State1=0 State0=0 
PORTB=0x00;
DDRB=0x03;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Fast PWM top=OCR0A
// OC0A output: Non-Inverted PWM
// OC0B output: Non-Inverted PWM
TCCR0A=0xA3;
TCCR0B=0x08;
TCNT0=0x00;
OCR0A=0x00;
OCR0B=0x00;

// External Interrupt(s) initialization
// INT0: Off
// Interrupt on any change on pins PCINT0-5: Off
GIMSK=0x00;
MCUCR=0x00;

// Timer/Counter 0 Interrupt(s) initialization
TIMSK0=0x00;

// Analog Comparator initialization
// Analog Comparator: Off
ACSR=0x80;
ADCSRB=0x00;

while (1)
      {
      // Place your code here
         while(OCR0B<0xff)
      {
          OCR0B=OCR0B+0x01;
          delay_ms(5);
      }
      while(OCR0A<0xff)
          {
                OCR0A=OCR0A+0x01;
                delay_ms(5);
          }
           while(OCR0A>0x00)
          {
                OCR0A=OCR0A-0x01;
                delay_ms(5);
          }
      while(OCR0B>0x00)
      {
          OCR0B=OCR0B-0x01;
          delay_ms(5);
      }     
      
      }; 
      
}


Подал питание диоды вообще не загорелись. Подскажите пожалуйста в чем ошибка.
Реклама
Друг Кота
Аватара пользователя
Сообщения: 3872
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Сообщение Engineer_Keen »

Код вроде нормальный, может контроллер не прошился, или светодиоды горелые или стоят не правильно, или резисторы на самом деле не 150, а 150к? Кстати, частота там не 4Мгц, 9.6Мгц (что дает частоту ШИМ около 140Гц, но это нормально). Фьюзы не трогали?
Реклама
Родился
Сообщения: 10
Зарегистрирован: Чт янв 16, 2014 04:35:27

Сообщение pe4en »

фьюзы не трогал. оригинальную прошивку заливал из оригинального топика все хорошо работало. Вот и я не могу понять в чем проблема.
Друг Кота
Аватара пользователя
Сообщения: 3872
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Сообщение Engineer_Keen »

А, вот нашел... TCCR0B=0x08; при таком делителе таймер вообще отключен, а при 0x06-0x07 тактируется от ноги T0 (PB2), нужно ставить меньше 6. В статье наверно косяк что написано prescaler=8 или это не значение регистра, а значение самого делителя (по даташиту младшие 3 бита TCCR0B: 000 - откл, 001 - F/1, 010 - F/8, 011 - F/64 и.т.д., т.е. надо писать TCCR0B=0x02. А 140 Гц получается если TCCR0B=0x04, я на один бит ошибся в первом сообщении.
Реклама
Эиком - электронные компоненты и радиодетали
Родился
Сообщения: 10
Зарегистрирован: Чт янв 16, 2014 04:35:27

Сообщение pe4en »

теперь сделал TCCR0B=0x02. Процесс пошел. НО теперь возникает следующая проблема у меня работает только 1 канал который на OCR0B. получается с TCCR0A нужно сделать так же?
Реклама
Друг Кота
Аватара пользователя
Сообщения: 3872
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Сообщение Engineer_Keen »

Нет, читайте что значат биты TCCRxx в даташите. Ваш пример должен работать на обоих каналах. Я проверял алгоритм и настройки таймеров, у меня оба канала работали.

Проверьте этим:
T13_2PWM.hex
(419 байт) 219 скачиваний
Код, если не верите, инициализация 100% как у вас (кроме исправленного делителя), алгоритм изменения яркости тоже, но с учетем переноса на другой язык.
Спойлер

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

.include	"tn13def.inc"
.include	"macroavr.asm"
	.def	ZERO=R0
	.equ	ms=1
.macro	DELAY
	LDI	R16,@0
	RCALL	DEL
	.endm
.cseg
.org	0
	CLR	ZERO
	OUTI	CLKPR,0x80	// Crystal Oscillator division factor: 1
	OUT	CLKPR,ZERO	// Fclk=9.6MHz
	OUTI	SPL,Low(RAMEND)
	OUTI	PORTB,0x00	// Port B initialization
	OUTI	DDRB,0x03
	OUTI	TCCR0A,0xA3	// Timer/Counter 0 initialization
	OUTI	TCCR0B,0x02
	OUT	TCNT0,ZERO
	OUT	OCR0A,ZERO
	OUT	OCR0B,ZERO
	OUT	GIMSK,ZERO	// External Interrupt(s) initialization
	OUT	MCUCR,ZERO
	OUT	TIMSK0,ZERO	// Timer/Counter 0 Interrupt(s) initialization
	OUTI	ACSR,0x80	// Analog Comparator initialization
	OUT	ADCSRB,ZERO
LOOP:				//while (1) {
L1:	IN	R16,OCR0B
	CJLO	R16,0xFE,L01	//while(OCR0B<0xff)
	RJMP	L2
L01:	INC	R16		//OCR0B=OCR0B+0x01;
	OUT	OCR0B,R16
	DELAY	5,ms		//delay_ms(5);
	RJMP	L1
L2:	IN	R16,OCR0A
	CJLO	R16,0xFE,L02	//E.T.C.
	RJMP	L3
L02:	INC	R16
	OUT	OCR0A,R16
	DELAY	5,ms
	RJMP	L2
L3:	IN	R16,OCR0A
	CJNE	R16,0x01,L03
	RJMP	L4
L03:	DEC	R16
	OUT	OCR0A,R16
	DELAY	5,ms
	RJMP	L3
L4:	IN	R16,OCR0B
	CJNE	R16,0x01,L04
	RJMP	LOOP		//} while end
L04:	DEC	R16
	OUT	OCR0B,R16
	DELAY	5,ms
	RJMP	L4
DEL:	LDI	R17,0x0D	//delay R16 ms
DEL1:	LDI	R18,0xF5
DEL0:	DEC	R18
	BRNE	DEL0
	DEC	R17
	BRNE	DEL1
	DEC	R16
	BRNE	DEL
	RET
Реклама
Родился
Сообщения: 10
Зарегистрирован: Чт янв 16, 2014 04:35:27

Сообщение pe4en »

спасибо за помощь. залил вашу прошивку - тот же результат. и интересно еще что с вашей он моргает. Скорее всего проблема вызвана тем, что я пытаюсь использовать RGB диод ARL-5213RGBC/4A. Видимо он не поддерживает смешение цветов.
Еще есть такой вопрос: так как у нас аппаратных ШИМа всего 2 требуется еще хотя бы один. Каким лучше алгоритмом его реализовывать программным ШИМом или BAM (http://bsvi.ru/bam-alternativa-shimu/)?
Друг Кота
Аватара пользователя
Сообщения: 3872
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Сообщение Engineer_Keen »

pe4en писал(а):Скорее всего проблема вызвана тем, что я пытаюсь использовать RGB диод ARL-5213RGBC/4A. Видимо он не поддерживает смешение цветов.
Семен Семеныч!(С) Ну конечно, если он с общим анодом, то его к + подключать, а не на землю, надеюсь хоть где у него общий вывод в знаете?
pe4en писал(а): Еще есть такой вопрос: так как у нас аппаратных ШИМа всего 2 требуется еще хотя бы один. Каким лучше алгоритмом его реализовывать программным ШИМом или BAM (http://bsvi.ru/bam-alternativa-shimu/)?
Как вам проще и удобнее будет так и сделайте.
Родился
Сообщения: 10
Зарегистрирован: Чт янв 16, 2014 04:35:27

Сообщение pe4en »

в смысле на + подключать? Извиняюсь за совсем глупые вопросы.
Я общую ногу на - подключил, а остальные на ноги МК с ШИМом.
Друг Кота
Аватара пользователя
Сообщения: 3872
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Сообщение Engineer_Keen »

ARL-5213RGBC/4A светодиод с общим анодом, если вы его на землю подключили, то как он у вас вообще светился в обратную сторону??? Самую длинную ногу (2я со стороны фаски на корпусе, если судить по чертежу) нужно подключать к +, тогда он будет включен верно, а то что катодами он будет на контроллере просто инвертирует ваш алгоритм, а это в данном случае ни на что не влияет, т.к. он симметричный.
Вымогатель припоя
Аватара пользователя
Сообщения: 651
Зарегистрирован: Пн мар 23, 2009 09:25:58
Откуда: Самара

Сообщение mr_smit »

pe4en:

Изображение

Анод это плюс
Нельзя всё знать, достаточно понимать.
Родился
Сообщения: 10
Зарегистрирован: Чт янв 16, 2014 04:35:27

Сообщение pe4en »

Посыпаю голову пеплом перепутал 2 диода с виду и всех запутал. ARL-5213RGBC/4C на самом деле. с общим катодом
Родился
Сообщения: 10
Зарегистрирован: Чт янв 16, 2014 04:35:27

Сообщение pe4en »

Спасибо за помощь. тема закрыта
Ответить

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