Страница 196 из 421
Re: CodeVision AVR в вопросах и ответах
Добавлено: Чт мар 29, 2012 22:21:28
*Trigger*
Я как то тоже так писал, один unsigned char на все переменные. Была ошибка. Нужно так:
Код: Выделить всё
void mathematics(unsigned char sec, unsigned char min)
Re: CodeVision AVR в вопросах и ответах
Добавлено: Чт мар 29, 2012 22:25:34
FreshMan
точно........, заработало.....
СПАСИБО !!!

Re: CodeVision AVR в вопросах и ответах
Добавлено: Чт мар 29, 2012 22:37:29
vitalik_1984
MS24 писал(а):Ребят, подскажите почему не работает элементарнейший код!
Диод тупо моргает один раз и все!
Где моргает один раз?В железе?Если в проте ждите дольше:) 1000 мс = 100000мс в проте или как повезет
а еще на таких контроллерах может быть джей таг его нужно отключать,чтобы все ноги работали нормально.
посмотрите какие остальные значения ноги.даташита у меня нет сейчас под рукой.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пт мар 30, 2012 08:28:59
MS24
vitalik_1984 писал(а):MS24 писал(а):Ребят, подскажите почему не работает элементарнейший код!
Диод тупо моргает один раз и все!
Где моргает один раз?В железе?Если в проте ждите дольше:) 1000 мс = 100000мс в проте или как повезет
а еще на таких контроллерах может быть джей таг его нужно отключать,чтобы все ноги работали нормально.
посмотрите какие остальные значения ноги.даташита у меня нет сейчас под рукой.
А если я шью через джитаг? ) У меня драгон программатор ) Моргает в железе.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пт мар 30, 2012 21:10:55
Mr.Denis
Эта конструкция
Обозначает следящие:
PORTB = 0x00; // Обнуляем PORTB
PORTB |= (1 << PB1); // Устанавливаем 1 в PORTB.1, то есть PORTB.1=1;
И по идем после выполнения этого куска кода получается:
PORTB = 0x00000010; // В двоичной (BIN)
PORTB = 0x02; // В шестнадцатеричной (HEX)
PORTB = 2; // В десятичной (DEC)
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пт мар 30, 2012 21:41:44
vitalik_1984
MS24 писал(а):
А если я шью через джитаг? ) У меня драгон программатор ) Моргает в железе.
ох как же я угадал то

это же PDO джей тага. тут выход либо выключить его после окончания программирования по спи либо просто забыть об этих ножках.PE0 -PDI PE1- PDO
Re: CodeVision AVR в вопросах и ответах
Добавлено: Сб мар 31, 2012 00:29:23
sheva_s
Подскажите пожалуста делаю вольтметр на мега8 получаю данные ацп в переменную unsigned int adc_data=600
есть коэффициент float k=0.01953125; на который нужно помножить данные преобразования ацп. Как перемножить эти 2 числа и получить переменную unsigned int K ?
Re: CodeVision AVR в вопросах и ответах
Добавлено: Сб мар 31, 2012 08:43:25
MS24
vitalik_1984 писал(а):MS24 писал(а):
А если я шью через джитаг? ) У меня драгон программатор ) Моргает в железе.
ох как же я угадал то

это же PDO джей тага. тут выход либо выключить его после окончания программирования по спи либо просто забыть об этих ножках.PE0 -PDI PE1- PDO
На самом деле проблема была в самом программаторе )) тупил он, ток большой почему-то жрет((
Re: CodeVision AVR в вопросах и ответах
Добавлено: Сб мар 31, 2012 08:44:36
MS24
Ребят, подскажите пожалуйста, как можно к одному пину подключить 6 кнопок?? Через ацп пробовал, никак не получается ((
Re: CodeVision AVR в вопросах и ответах
Добавлено: Сб мар 31, 2012 08:46:42
pyzhman
Не старался. Код где?
2sheva_s: приведите все переменный к вещественному типу. Апосля вычислений переведите в целое. Там дажеть функция есть в библиотеке.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Сб мар 31, 2012 09:13:56
ValBag
MS24 писал(а):Ребят, подскажите пожалуйста, как можно к одному пину подключить 6 кнопок?? Через ацп пробовал, никак не получается ((
Один из
способов
Re: CodeVision AVR в вопросах и ответах
Добавлено: Сб мар 31, 2012 10:57:53
sheva_s
Код: Выделить всё
#include <mega8.h>
#asm
.equ __lcd_port=0x18 ;PORTB
#endasm
#include <lcd.h>
#include <stdio.h>
unsigned int a,b;
int x;
float k=0.01953125;
char buffer [5];
// External Interrupt 0 service routine
interrupt [EXT_INT0] void ext_int0_isr(void)
{
// Place your code here
}
#include <delay.h>
#define ADC_VREF_TYPE 0x40
// ADC interrupt service routine
interrupt [ADC_INT] void adc_isr(void)
{
unsigned int adc_data;
// Read the AD conversion result
adc_data=ADCW;
// Place your code here
a=a+adc_data;
x++;
if(x==8){b=a>>3; a=0; x=0;};
}
// Declare your global variables here
void DISPLAY(void)
{ sprintf(buffer, "%4d",b);
lcd_gotoxy( 2,0 );
lcd_puts(buffer);
};
lcd_gotoxy( 0,0 );
lcd_putsf( "U=" );
sprintf(buffer, "%4d",b);
lcd_gotoxy( 2,0 );
lcd_puts(buffer);
while (1)
{
// Place your code here
ADCSRA.6=1;
delay_ms(10);
DISPLAY();
};
}
Вот код по которому меряю напряжение с помощью ацп. В переменную b попадает среднее значение после 8 измерений нужно это значение умножить на коэффициент float k=0.01953125; но они разных типов как поступить в таком случае .
MS24 писал(а):2sheva_s: приведите все переменный к вещественному типу. Апосля вычислений переведите в целое.
можно подробнее что значит вещественный тип.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Сб мар 31, 2012 11:34:01
urry
во-первых, переменная b у вас должна быть volatile.
http://www.pic24.ru/doku.php/osa/articl ... r_chainiks
Во - вторых, старайтесь ничего не делать в прерывании, ставьте флаг готовности и в основном цикле анализируйте результат, умножайте и пр.
В третьих, большими буквами в программе обозначаются только константы, название функции DISPLEY, пусть даже с орфографической ошибкой такой моветон, шо песец.
В четвертых
float fRez;
int iRez;
fRez=(float)b*k;
iRez=(int)fRez;
Re: CodeVision AVR в вопросах и ответах
Добавлено: Сб мар 31, 2012 12:33:32
sheva_s
Спасибо за советы буду пробовать.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Сб мар 31, 2012 12:58:40
vitalik_1984
Я не понимаю зачем писать вот эту пустую простыню.Неужели трудно выделить нужную часть текста и задать вопрос, а весь текст привести во вложении для тех кто захочет целиком посмотреть?
sheva_s писал(а):Спойлер
Код: Выделить всё
// 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=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTB=0x00;
DDRB=0x00;
// Port C initialization
// Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;
DDRC=0x00;
// 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: Timer 0 Stopped
TCCR0=0x00;
TCNT0=0x00;
sheva_s писал(а):Код: Выделить всё
lcd_gotoxy( 0,0 );
lcd_putsf( "U=" );
sprintf(buffer, "%4d",b);
lcd_gotoxy( 2,0 );
lcd_puts(buffer);
А вот так не получится разве сделать?
Код: Выделить всё
sprintf(buffer, "U=%4d",b);
lcd_gotoxy( 0,0 );
lcd_puts(buffer);
Re: CodeVision AVR в вопросах и ответах
Добавлено: Сб мар 31, 2012 13:07:20
MS24
sheva_s
спасибо! буду разбираться!
Re: CodeVision AVR в вопросах и ответах
Добавлено: Сб мар 31, 2012 13:15:51
vitalik_1984
MS24И что вам sheva_s посоветовал?
Re: CodeVision AVR в вопросах и ответах
Добавлено: Сб мар 31, 2012 14:39:28
gve
здравствуйте! помогите разобраться с проблемой.
при выводе информации на светодиодную матрицу 8*56 сильно теряется яркость
atmega8 прошит на 8 мГц, использую сдвиговые регистры 74hc595
порты подключения 74hc595 PORTC.0 порт SH_CP; PORTC.1 - DS; PORTC.2 - ST_CP
минусы светодиодной матрицы подключены на PORTB
в чем может быть проблема?
может не хватает скорости записи данных в сдвиговый регистр?
при уменьшении светодиодной матрицы яркость увеличивается.
пример кода
Код: Выделить всё
for(i=0;i<8;i++)
{
//порты подключения 74hc595 PORTC.0 порт SH_CP; PORTC.1 - DS; PORTC.2 - ST_CP
// минусы светодиодной матрицы подключены на PORTB
PORTC=0b0000001;
PORTC=0b0001001;
for(j=0;j<56;j++)
{
PORTC.0 = 0;
PORTC.1 = 1; // все биты равны 1
PORTC.0 = 1;
}
PORTB=s2[i];//в этом случае сильно теряется яркость. s2[] массив последов включения PORTB.0..7
//если записать PORTB=0x00; то все хорошо.
PORTC.2 = 1;
}
Re: CodeVision AVR в вопросах и ответах
Добавлено: Сб мар 31, 2012 16:49:27
ValBag
gve
Попробуйте уменьшить сопротивления балластных резисторов, включенных последовательно с сегментами матрицы, руководствуясь максимально допустимым импульсным током через матрицу и не превышая также ток через PORTB.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Сб мар 31, 2012 17:02:23
vitalik_1984
gve писал(а):в чем может быть проблема?
1.В том что при четырех столбцах матрицы время горения каждого столбца = Tпериода/4
Соответственно при 8 столбцах время в два раза меньше ну и яркость вслед за этим тоже изменяется.От этого никуда не денешься.
ValBag писал(а):Попробуйте уменьшить сопротивления балластных резисторов
Согласен
2.Промеряйте напряжение на запитку контроллера и регистра может просто источник питания проседает.