Страница 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
точно........, заработало.....
СПАСИБО !!! :beer:

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 |= (1 << PB1);
Обозначает следящие:
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.Промеряйте напряжение на запитку контроллера и регистра может просто источник питания проседает.