реклама на сайте
подробности

 
 
3 страниц V   1 2 3 >  
Reply to this topicStart new topic
> Светодиоды и AVR не дружат.
ps1x
сообщение Mar 20 2006, 21:16
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 300
Регистрация: 15-03-06
Из: Москва
Пользователь №: 15 284



В общем дело вот в чем, сегодня доехал таки до чипа и дипа и закупился необходимыми деталями.
Спаял простую схемку с одним диодом через резистор подключающимся к AVR MEGA8. Программу которая просто мигает этим диодом залил в МК. Все отлично зашилось через 5 проводков, диод замигал в опщем щастье! Захотелось большего, и припаял еще 3 диода все к порту C выводам 2,3,4,5. Записал в МК прошивку:

Цитата
#include <mega8.h>

// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
if (PORTC.5==0)
{
PORTC.5=1;
PORTC.4=0;
}
else
{
PORTC.5=0;
PORTC.4=1;
}
// Place your code here

}

// Declare your global variables here

void main(void)
{
PORTC.5=0;
PORTC.4=1;
// Declare your local variables here

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

// Port C initialization
// Func6=In Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
// State6=T State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
PORTC=0x00;
DDRC=0x3F;

// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0x00;
DDRD=0x00;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 3,906 kHz
TCCR0=0x04;
TCNT0=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer 1 Stopped
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer 2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;

// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
MCUCR=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x01;

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;

// Global enable interrupts
#asm("sei")

while (1)
{
// Place your code here

};
}




В результате все диоды мигают одновременно с частотой таймера, хотя должны мигать только PC.4 и PC.5 ПООЧЕРЕДНО!
И еще момент такой, в ISIS все эмулируется нормально, т.е. помигивают только 2 диода поочередно, остальные не горят.

Помогите плз разобраться )

Сообщение отредактировал ps1x - Mar 20 2006, 21:18
Go to the top of the page
 
+Quote Post
ps1x
сообщение Mar 20 2006, 22:24
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 300
Регистрация: 15-03-06
Из: Москва
Пользователь №: 15 284



Уже 11 человек посмотрели эту тему, неужели никто из них не знает в чем дело?
Кстати если это поможет понять проблему - пользуюсь Code Vision AVR.
Go to the top of the page
 
+Quote Post
AndyBig
сообщение Mar 20 2006, 22:29
Сообщение #3


Иногдящий
****

Группа: Свой
Сообщений: 691
Регистрация: 28-02-05
Пользователь №: 2 931



По идее все верно, должны моргать поочередно РС4 и РС5...
Вообще-то, АВР очень даже дружит со светодиодами, так что где-то ошибка. Схему подключения можно глянуть?
Go to the top of the page
 
+Quote Post
ps1x
сообщение Mar 20 2006, 22:33
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 300
Регистрация: 15-03-06
Из: Москва
Пользователь №: 15 284



ДОБАВЛЕННО: И еще, попробовал прогнать програмку:

PORTC++;
delay_ms(500);
if (PORTC==200)
{PORTC=37;}

результаты весьма странные, получается инвертированый порт, т.е. если в программе PC.5 = 1 то в реальности светодиод не горит!!! (кстати выражение вида PORTC.5=1 компилируется, но результата не дает, равно как и PORTC.5=0 т.е. светодиоды не горят все или горят все)
Если заменить PORTC.5 на PORTC.4 то вообще ничего не мигает =(

Конечно можно, извиняюсь за некоторую неразборчивость схемы:

Сообщение отредактировал ps1x - Mar 20 2006, 22:47
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
AndyBig
сообщение Mar 20 2006, 22:51
Сообщение #5


Иногдящий
****

Группа: Свой
Сообщений: 691
Регистрация: 28-02-05
Пользователь №: 2 931



Во-первых, совет: светодиоды подключайте к контроллеру не анодом, а катодом - на землю мега вроде бы выносливее, чем от питания.
Во-вторых, какое напряжение питания у Вас на меге? Если 5 вольт, то 100 ом - это слишком мало для гасящего резистора, ток с вывода превысит максимально допустимый. Возможно, в этом проблема?
Go to the top of the page
 
+Quote Post
ps1x
сообщение Mar 20 2006, 23:04
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 300
Регистрация: 15-03-06
Из: Москва
Пользователь №: 15 284



Щас момент, не уходите спать, подпаяю еще один резюк...
Хотя они вроде довольно тускло горят....

Сообщение отредактировал ps1x - Mar 20 2006, 23:04
Go to the top of the page
 
+Quote Post
ps1x
сообщение Mar 20 2006, 23:23
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 300
Регистрация: 15-03-06
Из: Москва
Пользователь №: 15 284



Резюк припаял но увы, чуда не случилось...
Странный момент в CVAVR я пишу PORTC.3=1 но нифига не работает, пишу PORTC=0b00100 тоже не пашет, а PORTC=0xBB работает, но наооборот ((( инвертируется) (?????????)

Еще кое-что интересное:
Если выполнить
PORTC=0xBB;
то загораются диоды подключенные к PC5 и PC2 хотя калькулятор дает следующее:
(HEX)0xBB=0b10111011

Сообщение отредактировал ps1x - Mar 20 2006, 23:27
Go to the top of the page
 
+Quote Post
ps1x
сообщение Mar 20 2006, 23:41
Сообщение #8


Местный
***

Группа: Свой
Сообщений: 300
Регистрация: 15-03-06
Из: Москва
Пользователь №: 15 284



Другой Мк тоже не работает корректно при записи PORTC.5=1 загораются все светодиоды (((

Сообщение отредактировал ps1x - Mar 20 2006, 23:43
Go to the top of the page
 
+Quote Post
Laksus
сообщение Mar 21 2006, 00:14
Сообщение #9


Частый гость
**

Группа: Участник
Сообщений: 146
Регистрация: 16-05-05
Пользователь №: 5 069



Цитата
Все отлично зашилось через 5 проводков, диод замигал в опщем щастье!
...
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 3,906 kHz

То есть Вы утверждаете, что в состоянии различить мигание с частотой 3,906 kHz?
Александр
2006 03 21
Go to the top of the page
 
+Quote Post
ps1x
сообщение Mar 21 2006, 00:43
Сообщение #10


Местный
***

Группа: Свой
Сообщений: 300
Регистрация: 15-03-06
Из: Москва
Пользователь №: 15 284



2 Laksus : Насколько я понял это делитель.
Впрочем, при выполнении данной программы диод мигал с периодом около секунды наверное, т.е. вполне различимо.

Еще одна проблема:
Попробовал подключить те самые 4 светодиода к порту Д. От 0 до 3.
При выполнении программы
PORTD=0xFF;
Загорается диод подключенный к порту PORTD.3 и все!!!!
Кто нибудь обьясните плз дебилу что это за хрень.
И еще почему не работает конструкция вида PORTD.3=1;????

Сообщение отредактировал ps1x - Mar 21 2006, 00:44
Go to the top of the page
 
+Quote Post
ps1x
сообщение Mar 21 2006, 00:58
Сообщение #11


Местный
***

Группа: Свой
Сообщений: 300
Регистрация: 15-03-06
Из: Москва
Пользователь №: 15 284



Как Вы думаете, что будет, если зашить в МК вот эту программу, и к выводам PORTD.0 и PORTD.1 подключить два светодиода на землю, через защитное сопротивление в 200 Ом???

Цитата
#include <mega8.h>
#include <delay.h>


interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{


}


void main(void)
{

PORTD=0x00;
DDRD=0xFF;
TCCR0=0x04;
TCNT0=0x00;
TIMSK=0x01;
ACSR=0x80;
SFIOR=0x00;

#asm("sei")

while (1)
{
PORTD.0=1;
PORTD.1=0;
delay_ms(100);
PORTD.1=1;
PORTD.0=0;
delay_ms(100);
};
}


А вот и не угадали, ничего не будет. (по крайней мере если компилировать в СV AVR и зашивать им же)
в общем я офигевваю smile3046.gif
Кто нибудь скажите пожалуйста, что же за фигня происходит.


Кстати, если

PORTD.0=1;
PORTD.1=0;
delay_ms(100);
PORTD.1=1;
PORTD.0=0;
delay_ms(100);

заменить на

PORTD++;

то загораются все 4 светодиода,
однако если заменить на

PORTD=0xFF;

то загорается светодиод PORTD.3

Вот схема подключения диодов:

Сообщение отредактировал ps1x - Mar 21 2006, 01:06
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
ps1x
сообщение Mar 21 2006, 04:39
Сообщение #12


Местный
***

Группа: Свой
Сообщений: 300
Регистрация: 15-03-06
Из: Москва
Пользователь №: 15 284



Может быть дело в фьюзах? Всю ночь бился ап стену и не смог заставить схемку правильно мигать лампочками. Наверно пора убить себя biggrin.gif .

УМНЫЕ ЛЮДИ УМОЛЯЮ ВАС, СКАЖИТЕ ЧТОЖЕ НУЖНО СДЕЛАТЬ ЧТОБЫ ОНО ЗАРАБОТАЛО!!!!!

И почему не получается PORTD.0=1?
Go to the top of the page
 
+Quote Post
WHALE
сообщение Mar 21 2006, 05:23
Сообщение #13


Знающий
****

Группа: Свой
Сообщений: 902
Регистрация: 2-01-06
Из: Краснодар
Пользователь №: 12 768



ОТ чего тактируется мега и фьзы в студию.


--------------------
"Hello, word!" - 17 errors 56 warnings
Go to the top of the page
 
+Quote Post
ILYCHOFF
сообщение Mar 21 2006, 05:43
Сообщение #14


Частый гость
**

Группа: Свой
Сообщений: 78
Регистрация: 5-07-05
Из: Великий Новгород
Пользователь №: 6 536



Подключите сначала светодиоды нормально как Вам AndyBig писал, затем проверьте фьюзы см. даташит и кстати от чего тактируется мега.

Я сам начинал работу с контроллерами с такой же программы и тоже на CodeVision, но у меня вообще никаких проблем не было.

Все внимательно перепроверьте по себе знаю.

конструкция PORTD.1=1; прекрасно работает (в CodeVision разумеется).
Go to the top of the page
 
+Quote Post
ps1x
сообщение Mar 21 2006, 05:49
Сообщение #15


Местный
***

Группа: Свой
Сообщений: 300
Регистрация: 15-03-06
Из: Москва
Пользователь №: 15 284



Мега тактируется от внутреннего осциллятора, а фьюзы все по нулям.
Диоды подключены так:

PORTD.0 ---> +диода ----> диод -----> 200 ом ----> Земля
и так для каждого пина порта D.

Разве это не правильно? wub.gif

ps Спасибо за отзывы.
Go to the top of the page
 
+Quote Post

3 страниц V   1 2 3 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 03:56
Рейтинг@Mail.ru


Страница сгенерированна за 0.01447 секунд с 7
ELECTRONIX ©2004-2016