Например TDA7294

Форум РадиоКот • Просмотр темы - AVR studio в вопросах и ответах
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Сб сен 06, 2025 12:58:04

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 3179 ]     ... , , , 84, , , ...  
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: AVR studio 4 в вопросах и ответах
СообщениеДобавлено: Чт апр 17, 2014 17:27:49 
Друг Кота
Аватар пользователя

Карма: 27
Рейтинг сообщений: 33
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Сообщений: 6296
Откуда: Ukraine
Рейтинг сообщения: 0
ARV, я именно так и поступил :))
вылез еще один баг проги
при компиляции и прошивке одного и того же проэкта из под студии и из под eclipse я получаю разные результаты, хотя и там и там оптимизация отключена
после прошивки из под студии в роботе оборудования я замечаю баг, а вот eclipse и 6-я студия выдает чистый результат
в чем может быть загвоздка ?

_________________
Tell Me The Truth


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: AVR studio 4 в вопросах и ответах
СообщениеДобавлено: Пт апр 18, 2014 10:06:39 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 98
Рейтинг сообщений: 2119
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18408
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
FreshMan писал(а):
в чем может быть загвоздка ?

даже экстрасенсы просят хотя бы фотографию, а мы тут не экстрасенсы вообще...

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: AVR studio 4 в вопросах и ответах
СообщениеДобавлено: Пт апр 18, 2014 11:42:16 
Друг Кота
Аватар пользователя

Карма: 27
Рейтинг сообщений: 33
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Сообщений: 6296
Откуда: Ukraine
Рейтинг сообщения: 0
ARV писал(а):
хотя бы фотографию

вот
Спойлер
Код:
/*
 * Timer 1  используется как источник времени
 * в часах 6 штук газоразрядных индикаторов
 *
 * динамическая индикация организована на таймере Т2
 * данный таймер работает в режиме Fast PWM с частотой .......
 * в сравнении мы выводим нужную нам цифру на К155ИД1 и зажигаем анод требуемой лампы
 * в переполнении мы выключаем выходы К155ИД1 и тушим все лампы
 * изменяя значение которое мы заносим в OCR2 (регистр сравнения таймера Т2) мы изменяем время
 * срабатывания прерывания "по совпадению" и тем самым регулируем яркость соответствующей лампы
 */

#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>

#define AnodRazryda5 (PORTD|=(1<<3)) // анаод газоразрядного индикатора, десятки часов
#define AnodRazryda4 (PORTD|=(1<<4)) // анаод газоразрядного индикатора, единици часов
#define AnodRazryda3 (PORTB|=(1<<6)) // анаод газоразрядного индикатора, десятки минут
#define AnodRazryda2 (PORTB|=(1<<7)) // анаод газоразрядного индикатора, еденици минут
#define AnodRazryda1 (PORTB|=(1<<4)) // анаод газоразрядного индикатора, десятки секунд
#define AnodRazryda0 (PORTB|=(1<<5)) // анаод газоразрядного индикатора, еденици секунд

#define TurnOff_Nixie() {PORTB=0x0A, PORTD&= ~(1<<4 | 1<<3);} // закрываем анодные ключи ламп и выключаем выходы
                                                              // дешифратора К155ИД1 подавая на его вход
                                                              // код "А" (шестнадцатеричная система)

//#define Input_Decoder(x) {PORTB = (PORTB & 0xF6) | ((x)&1) | (((x)&2)<<2), PORTC = (PORTC & 0xFD) | (((x)&4)<<1), PORTD = (PORTD & 0xFD) | (((x)&8)<<1);}
#define Input_Decoder(x) {PORTB = (PORTB & 0xF6) | ((x)&1) | (((x)&2)<<2);\
                         PORTC = (PORTC & 0xFD) | (((x)&4)>>1);\
                         PORTD = (PORTD & 0xFD) | (((x)&8)>>2);}

#define button_1 (PIND&(1<<5))
#define button_2 (PIND&(1<<6))
#define button_3 (PIND&(1<<7))

#define drebezg 10
#define ChangeOfNumbers 300
//#define stop 700
#define time_blink 240

//uint8_t mode;
unsigned char mode=2;
unsigned char second;
unsigned char minute;
unsigned char hour;
unsigned char minuteAlarm;
unsigned char HourAlarm;

volatile unsigned char flag;
volatile unsigned char flg;
volatile unsigned char metka;
volatile unsigned char number;
volatile unsigned char flagSS;
unsigned int counter;
unsigned int cnt_timer;
volatile unsigned char var;
volatile unsigned char t=2;
volatile unsigned char t0;
volatile unsigned char t1;
//volatile unsigned char iocr=25;
//volatile unsigned char iocr1=50;
volatile unsigned char iocr=0;
volatile unsigned char iocr1=13;
volatile unsigned char fl=0;
volatile unsigned char fl1=0;
volatile unsigned char flag1=0;
volatile unsigned char fll=0;

unsigned char fr[6];  // какой разряд изменил значение
unsigned char Screen[6]; // массив экрана, сюда мы храним старое значение времени
unsigned char TimeScreen[6];  // массив временного экрана, сюда мы пишем "новоиспеченную" цифру
unsigned char BrightnessOldNumber[6]={10,10,10,10,10,10};// буфер временного хранения яркостей для каждого разряда СТАРОЙ цифры
unsigned char BrightnessNewNumber[6]={250,250,250,250,250,250};// буфер временного хранения яркостей для каждого разряда НОВОЙ цифры


unsigned char psc[26]={10,30,50,70,90,110,130,150,170,190,210,230,250, // в данном массиве хранятся значения для регистра OCR2
                     250,230,210,190,170,150,130,110,90,70,50,30,10};// если  OCR2=10 то цифра будет светить по максимуму
                                                                       // если  OCR2=250 то цифра будет светить по минимуму

//uint8_t *br_0[4] = {&BrightnessOldNumber[2], &BrightnessOldNumber[3], &BrightnessNewNumber[0], &BrightnessNewNumber[1]}; // для fl1 == 0;
//uint8_t *br_1[4] = {&BrightnessNewNumber[2], &BrightnessNewNumber[3], &BrightnessOldNumber[0], &BrightnessOldNumber[1]}; // для fl1 == 1;


// Timer 1 output compare A interrupt service routine
ISR (TIMER1_COMPA_vect)  // interrupt service routine (ISR)
{
   if(++second>=60)
   {
      second=0;
      minute++;
   }

   if(minute>=60)
   {
      minute=0;
      hour++;
   }

   if(hour>=24) hour=0;

   flag=1;
   metka=1;
   cnt_timer=0;

}

/////////////////
//// ЭФФЕКТЫ ////
/////////////////

// Timer 2 overflow interrupt service routine
ISR (TIMER2_OVF_vect)                             // данное прерывание происходит с периодичностью раз в 2мс
{
   static unsigned char i;

   TurnOff_Nixie();

   if (flagSS==1) //если после смены времени выполнилась ф-ция SetScreen
    {
       switch (mode)
       {
//---------- эффект плавной смены ----------
          case 0: if (++counter==15)                  // если прошло 30мс
               {
                  counter=0;
                  iocr++;
                  for (i=0; i<=5; i++)
                  {
                     if (fr[i]==1)               // смотрим в каком разряде изменилась цифра
                     {
                        BrightnessOldNumber[i]=psc[iocr];    // изменяем яркость от max до minute
                     }

                     if (iocr==13)               // если яркость достигла minute и цифра потухла
                     {
                        Screen[i]=TimeScreen[i];// выводим новое значение
                     }
                  }

                  if (iocr>=25)
                  {
                     flagSS=0;
                     iocr=0;
                  }
                } break;

//---------- эффект перебора ----------
          case 1: if (++counter==28)                      // если прошло 76 мс (период смены перебираемой цифры)
               {
                  counter=0;
                  number++;                           // меняем переборную цифру

                  for (i=0; i<=5; i++)
                  {
                     if (fr[i]==1)                   // смотрим в каком разряде произошло изменение цифры
                     {
                        if (number<=9)
                        {
                           Screen[i]=number;       // там где было изменение начинаем делать перебор
                        }
                        else
                        {
                           Screen[i]=TimeScreen[i];// выводим новое значение
                           fr[i]=0;                // сбрасываем фл
                           number=0;
                           flagSS=0;
                        }
                     }
                  }
                } break;

//---------- эффект перелива ----------

         case 2: if (++counter==15)
               {
                  cnt_timer=cnt_timer+(counter*2);
                  counter=0;

                  if (fl1==0)
                  {
                     iocr1++;
                     for (i=0; i<=5; i++)
                     {
                        if (fr[i]==1)
                        {
                           BrightnessNewNumber[i]=psc[iocr1];
                        }
                     }
                  }


                  if (fl1==1)
                  {
                     iocr++;
                     for (i=0; i<=5; i++)
                     {
                        if (fr[i]==1)
                        {
                           BrightnessOldNumber[i]=psc[iocr];
                        }

                     }
                  }

                  fl1^=1;

                  if (iocr>=12)
                  {
                     //fl=0;
                     fl1=0;
                     iocr=0;
                     iocr1=13;
                     flagSS=0;

                     for (i=0; i<=5; i++)
                     {
                        Screen[i]=TimeScreen[i];
                        BrightnessOldNumber[i]=10;
                        BrightnessNewNumber[i]=250;
                     }
                  }
               } break;
         default: break;
       }
    }

   if (mode!=2) // если выбран ЛЮБОЙ режим КРОМЕ перелива
   {
      OCR2=BrightnessOldNumber[t];
      if (++t>=6) t=0;
      if (++var>=6) var=0;

   }
   else       // при режиме ПЕРЕЛИВ цифр
   {
      if (fl==0)
      {
         if (++t0>=6) t0=0;
         OCR2=BrightnessNewNumber[t0];
      }
      if (fl==1)
      {
         if (++t1>=6) t1=0;
         OCR2=BrightnessOldNumber[t1];

         if(++var>=6) var=0;
      }

      fl^=1;
   }

}

/////////////////////
////  ИНДИКАЦИЯ  ////
/////////////////////

//Timer 2 output compare interrupt service routine
ISR (TIMER2_COMP_vect)
{
   if (mode!=2) // если НЕ выбран ПЕРЕЛИВ цифр
   {
      //PORTB=Screen[var];
      Input_Decoder(Screen[var]); // посылаем число на вход К155ИД1
   }
   else
   {
      //PORTB=TimeScreen[var];
      //Input_Decoder(Screen[var]); // посылаем число на вход К155ИД1
      if (fl==0) Input_Decoder(TimeScreen[var]);// если выводится НОВАЯ цифра
      if (fl==1) Input_Decoder(Screen[var]);    // если выводится СТАРАЯ цифра
   }

   switch (var)
   {
      case 0: AnodRazryda0; break; // зажигаем лампу десятков часов
      case 1: AnodRazryda1; break; // зажигаем лампу единиц часов
      case 2: AnodRazryda2; break; // зажигаем лампу десятков минут
      case 3: AnodRazryda3; break; // зажигаем лампу единиц минут
      case 4: AnodRazryda4; break; // зажигаем лампу десятков секунд
      case 5: AnodRazryda5; break; // зажигаем лампу единиц секунд

      default:break;
   }

}
//***********************************************************************************
void SetScreen (char hour, char minute, char second)
{
   static unsigned char i;

//   if (mode!=3) // если НЕ выбран обычный режим смены цифр
//   {
//      TimeScreen[0]=hour/10;
//      TimeScreen[1]=hour%10;
//      TimeScreen[2]=minute/10;
//      TimeScreen[3]=minute%10;
//      TimeScreen[4]=second/10;
//      TimeScreen[5]=second%10;
//
//
//      for (i=0; i<=5; i++)
//      {
//         if (TimeScreen[i]!=Screen[i]) //узнаём в каком разряде изменялась цифра
//         {
//            fr[i]=1;
//            //BrightnessOldNumber[i]=10;
//            //BrightnessNewNumber[i]=250;
//         }
//         else
//         {
//            fr[i]=0;
//         }
//      }
//   }
//   else
//   {
//      Screen[0]=hour/10;
//      Screen[1]=hour%10;
//      Screen[2]=minute/10;
//      Screen[3]=minute%10;
//      Screen[4]=second/10;
//      Screen[5]=second%10;
//   }
   if ((mode==2)&&(BrightnessNewNumber[0]=250))
   {
      TimeScreen[0]=hour/10;
      TimeScreen[1]=hour%10;
      TimeScreen[2]=minute/10;
      TimeScreen[3]=minute%10;
      TimeScreen[4]=second/10;
      TimeScreen[5]=second%10;

      for (i=0; i<=5; i++)
      {
         if (TimeScreen[i]!=Screen[i]) //узнаём в каком разряде изменялась цифра
         {
            fr[i]=1;
            //BrightnessOldNumber[i]=10;
            //BrightnessNewNumber[i]=250;
         }
         else
         {
            fr[i]=0;
         }
      }
   }
   else if ((mode==2)&&(BrightnessOldNumber[0]=250))
       {
         Screen[0]=hour/10;
         Screen[1]=hour%10;
         Screen[2]=minute/10;
         Screen[3]=minute%10;
         Screen[4]=second/10;
         Screen[5]=second%10;

         for (i=0; i<=5; i++)
               {
                  if (Screen[i]!=TimeScreen[i]) //узнаём в каком разряде изменялась цифра
                  {
                     fr[i]=1;
                     //BrightnessOldNumber[i]=10;
                     //BrightnessNewNumber[i]=250;
                  }
                  else
                  {
                     fr[i]=0;
                  }
               }
       }

   flag=0;  //сбрасываем флаг чтения
    flagSS=1;// флаг выполнения ф-ции SetScreen
}

//***********************************************************************************

int main(void)
{
DDRB =0b11111111;//The Port B Data Direction Registe   0-пин порта на вход               1-пин порта на выход
PORTB=0b00000000;//The Port B Data Register            1/0 - on/off pull-up resistor

DDRC= 0b00000011;
PORTC=0b00000000;

DDRD =0b00011011;
PORTD=0b11100000;


// Timer/Counter 1 initialization
TCCR1A=0x00;
TCCR1B|= 1<<CS12 | // clk/256 - делим основную частоту МК на 256 (предделидель для таймера), Clock value: 31,250 kHz
       1<<WGM12;  // Mode: CTC top=OCR1A (сброс при совпадении с OCR1A)
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x7A;
OCR1AL=0x11;
OCR1BH=0x00;
OCR1BL=0x00;

// Timer/Counter 2 initialization
ASSR=0x00;
TCCR2|= 1 << WGM20 | 1 << WGM21 | // Fast PWM mode
       1 << CS22;                // clk/256 - делим основную частоту МК на 256 (предделидель для таймера)
TCNT2=0x00;
OCR2=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK|= 1<<OCIE2 | // флаг разрешения прерывания по событию "совпадение" таймера/счетчика Т2
      1<<TOIE2 | // флаг разрешения прерывания по переполнению таймера/счетчика Т2
      1<<OCIE1A; // флаг разрешения прерывания по событию "сопадение А" таймера/счетчика Т2

sei (); // Global enable interrupts

 while (1)
 {


      if (flag==1)                                          // если прошла 1с
      {
         if (++metka>=9)
           switch (mode)                                     // выбираем режим отображения времени
            {
                case 0: SetScreen(hour,minute,second); break; // плавная смена цифр (ч:м:c)
                case 1: SetScreen(hour,minute,second); break; // перебор цифр(ч:м:c)
                case 2: SetScreen(hour,minute,second); break; // перелив цифр (ч:м:c)
                case 3: SetScreen(hour,minute,second); break; // обычная смена цифр (ч:м:c)

               default: break;
            }
       }



   }

}




















_________________
Tell Me The Truth


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: AVR studio 4 в вопросах и ответах
СообщениеДобавлено: Пт апр 18, 2014 12:11:21 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 98
Рейтинг сообщений: 2119
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18408
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
фотография не помогла :)
в чем проблема-то? по идее в 4-й студии и 6-й студии одинаковые компиляторы, результат тоже должен быть одинаковый... по исходнику мало что понятно (вообще, в чужом коде разбираться - это тяжкий труд)

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: AVR studio 4 в вопросах и ответах
СообщениеДобавлено: Пт апр 18, 2014 18:25:01 
Друг Кота
Аватар пользователя

Карма: 27
Рейтинг сообщений: 33
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Сообщений: 6296
Откуда: Ukraine
Рейтинг сообщения: 0
ARV писал(а):
в чем проблема-то?

спасибо что откликнулись :)
для того чтобы понять суть проблеммы мне надо будет целый ЭПОС написать
в двух словах это не раскажешь

_________________
Tell Me The Truth


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: AVR studio 4 в вопросах и ответах
СообщениеДобавлено: Пт апр 18, 2014 18:34:12 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 98
Рейтинг сообщений: 2119
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18408
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
FreshMan писал(а):
спасибо что откликнулись :)
для того чтобы понять суть проблеммы мне надо будет целый ЭПОС написать
в двух словах это не раскажешь

ну, в таком случае я могу вам разве что спеть или сплясать, чтобы стало легче :)))

илья старается всемерно
уравновесить зло добром
увидел парни бьют парнишку
красиво рядом станцевал

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: AVR studio 4 в вопросах и ответах
СообщениеДобавлено: Сб апр 19, 2014 19:35:43 
Сверлит текстолит когтями
Аватар пользователя

Карма: 9
Рейтинг сообщений: 19
Зарегистрирован: Ср мар 10, 2010 22:28:34
Сообщений: 1287
Откуда: Запад Беларуси
Рейтинг сообщения: 0
Можно ли в AVR Studio 6 сделать тип данных в 1 бит? Аналог типа данных bit в CV AVR.

_________________
Изображение
Изображение


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: AVR studio 4 в вопросах и ответах
СообщениеДобавлено: Сб апр 19, 2014 21:30:09 
Друг Кота
Аватар пользователя

Карма: 27
Рейтинг сообщений: 33
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Сообщений: 6296
Откуда: Ukraine
Рейтинг сообщения: 0
нет, под переменную выделяется минимум 1 байт
имеется такой вариант http://www.c-cpp.ru/books/bitovye-polya
но размер кода раздувается

_________________
Tell Me The Truth


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: AVR studio 4 в вопросах и ответах
СообщениеДобавлено: Сб апр 19, 2014 21:45:36 
Друг Кота
Аватар пользователя

Карма: 49
Рейтинг сообщений: 392
Зарегистрирован: Вс июл 12, 2009 19:15:29
Сообщений: 7014
Откуда: Ижевск
Рейтинг сообщения: 0
О, FreshMan, с почином! :))

_________________
Docendo discimus


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: AVR studio 4 в вопросах и ответах
СообщениеДобавлено: Сб апр 19, 2014 22:50:45 
Сверлит текстолит когтями
Аватар пользователя

Карма: 9
Рейтинг сообщений: 19
Зарегистрирован: Ср мар 10, 2010 22:28:34
Сообщений: 1287
Откуда: Запад Беларуси
Рейтинг сообщения: 0
Я уже разобрался... Можно работать также, как и с портами. Взять одну переменную и использовать её биты. Только вместо PORT.. написать переменную...
Вот например условие:
Код:
if ((temp&(1 << 1)) != 0)

если второй бит равен 1...

Как сделать так, чтобы при нажатии и удержании кнопки код выполнился только 1 раз? Например запись в EEPROM.
Код:
eeprom_update_byte(&my[temp],OCR0A);
temp++;

Совсем не надо, чтобы одно значение записалось сразу в несколько ячеек массива. Не хочется использовать пустые циклы, ждущие отпускания кнопки. Или может использовать INT0..

_________________
Изображение
Изображение


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: AVR studio 4 в вопросах и ответах
СообщениеДобавлено: Пт апр 25, 2014 20:11:39 
Открыл глаза
Аватар пользователя

Зарегистрирован: Вс май 30, 2010 20:27:33
Сообщений: 63
Откуда: Санкт-Петербург
Рейтинг сообщения: 0
Господа!
Подскажите, как реализовать софтовый уарт на произвольные ноги ? Как в BASCOM AVR ? Поделитесь примером, если не трудно!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: AVR studio 4 в вопросах и ответах
СообщениеДобавлено: Пт апр 25, 2014 21:11:21 
Вымогатель припоя
Аватар пользователя

Карма: -2
Рейтинг сообщений: 105
Зарегистрирован: Ср июн 19, 2013 08:10:48
Сообщений: 577
Откуда: Москва, СПб, Липецк, Рязань
Рейтинг сообщения: 0
Даташит прочитайте, как UART работает - думаю, не составит труда


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: AVR studio 4 в вопросах и ответах
СообщениеДобавлено: Пт апр 25, 2014 21:36:23 
Открыл глаза
Аватар пользователя

Зарегистрирован: Вс май 30, 2010 20:27:33
Сообщений: 63
Откуда: Санкт-Петербург
Рейтинг сообщения: 0
ИС-пытатель писал(а):
Даташит прочитайте, как UART работает - думаю, не составит труда


Я только начинаю осваивать, как прием и передача работает понимаю, а как пины поменять на нужные мне, что-то не понимаю


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: AVR studio 4 в вопросах и ответах
СообщениеДобавлено: Пт апр 25, 2014 21:45:22 
Вымогатель припоя
Аватар пользователя

Карма: -2
Рейтинг сообщений: 105
Зарегистрирован: Ср июн 19, 2013 08:10:48
Сообщений: 577
Откуда: Москва, СПб, Липецк, Рязань
Рейтинг сообщения: 0
У управлять пинами вообще умеете?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: AVR studio 4 в вопросах и ответах
СообщениеДобавлено: Сб апр 26, 2014 11:41:11 
Открыл глаза
Аватар пользователя

Зарегистрирован: Вс май 30, 2010 20:27:33
Сообщений: 63
Откуда: Санкт-Петербург
Рейтинг сообщения: 0
Код:
     ldi   temp,(1<<PB3)|(1<<PB4)           
     out   DDRB, temp            ;           ; настройка портов на выход PB3 и PB4

          cbi portb,4
          sbi portb,4   ; установка и снятия в 1

Правильно?

      clr   temp        ; USART: 115200, 8-N-1
      STS   UBRR0H,temp
      ldi   temp,NB   
      STS   UBRR0L,temp
      ldi   temp,(1<<RXEN0)|(1<<TXEN0)   
      STS   UCSR0B,temp
      ldi   temp,(1<<UCSZ00)|(1<<UCSZ01)
      STS   UCSR0C,temp

putc:                                  ; передача содержимого R19
      LDs   R16, UCSR0A
      sbrs   R16, UDRE0
      rjmp  putc       
      sts   UDR0,R19   
      ret

  А как сделать так, чтобы содержимое R19 передавалось на PB3 ?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: AVR studio 4 в вопросах и ответах
СообщениеДобавлено: Сб апр 26, 2014 12:46:04 
Вымогатель припоя
Аватар пользователя

Карма: -2
Рейтинг сообщений: 105
Зарегистрирован: Ср июн 19, 2013 08:10:48
Сообщений: 577
Откуда: Москва, СПб, Липецк, Рязань
Рейтинг сообщения: 0
Если у Вас PB3 - не объединен с выводом UART, то только эмулировать работу порта. т. е. смотрите описание работы протокола. Там есть старт-биты и стоп-биты(1 или 2). бит четности может быть или не быть. Алгоритм такой:
1. Устанавливаете вывод в 1. (начальное состояние)
2. сбрасываете вывод в 0 (начало передачи)
3. программная задержка согласно скорости передачи (для 115200 бод 8.7 мкс) в задержке надо учесть время выполнения команд сброса, и пересыла в порт. В принципе, может безболезненно отличатся до 10% в обе стороны.
4. посылаете младший бит. например, так:
Спойлер
Код:
mov r16, r19 ;загружаем значение для передачи
andi r16, 1 ;берем младший бит
shl  ; 3 сдвига влево для 3-й ножки порта
shl
shl
in r17, PINB
andi r17, ~(0b1000) ; сбрасываем 3-й бит
or r17, r16  ; если 3-й бит 1, то установим его
out PORTB, r17
shr r19 ; готовим следующий бит для передачи

или так:
Спойлер
Код:
sbrc r19,0
sbi PORTB, 3
sbrs r19,0
cbi PORTB, 3
shr r19

5. опять программная задержка
6. повторяете п. 4 и п.5 пока не передадите все 8 бит
7. устанавливаете порт в 1 (стоп-бит)
8. задержка
9. Если стоп-бита 2 - повторить п.7 и п.8
Передано!


Вложения:
UART.png [18.96 KiB]
Скачиваний: 386


Последний раз редактировалось ИС-пытатель Сб апр 26, 2014 13:19:29, всего редактировалось 2 раз(а).
Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: AVR studio 4 в вопросах и ответах
СообщениеДобавлено: Сб апр 26, 2014 13:02:01 
Друг Кота
Аватар пользователя

Карма: 27
Рейтинг сообщений: 33
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Сообщений: 6296
Откуда: Ukraine
Рейтинг сообщения: 0
при компиляции проэкты выдает следущие ошибки
Изображение
что компилятор хочет то мне этим сказать ?

_________________
Tell Me The Truth


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: AVR studio 4 в вопросах и ответах
СообщениеДобавлено: Сб апр 26, 2014 13:06:53 
Вымогатель припоя
Аватар пользователя

Карма: -2
Рейтинг сообщений: 105
Зарегистрирован: Ср июн 19, 2013 08:10:48
Сообщений: 577
Откуда: Москва, СПб, Липецк, Рязань
Рейтинг сообщения: 0
Наверное, то что у Вас флеш не резиновый.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: AVR studio 4 в вопросах и ответах
СообщениеДобавлено: Сб апр 26, 2014 13:09:43 
Друг Кота
Аватар пользователя

Карма: 27
Рейтинг сообщений: 33
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Сообщений: 6296
Откуда: Ukraine
Рейтинг сообщения: 0
да ну....., бросте...., то же eclipse компилит без единого вздоха :))

_________________
Tell Me The Truth


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: AVR studio 4 в вопросах и ответах
СообщениеДобавлено: Сб апр 26, 2014 13:11:59 
Вымогатель припоя
Аватар пользователя

Карма: -2
Рейтинг сообщений: 105
Зарегистрирован: Ср июн 19, 2013 08:10:48
Сообщений: 577
Откуда: Москва, СПб, Липецк, Рязань
Рейтинг сообщения: 0
Так, может, лучше оптимизирует? ;) У Вас там дословно написано, что:
"Секция text переполнена на 466 байт"
Секция text - это секция кода. Попробуйте изменить настройки оптимизации на более сильные


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 3179 ]     ... , , , 84, , , ...  

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 62


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y