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

 
 
6 страниц V  < 1 2 3 4 > »   
Reply to this topicStart new topic
> ATmega16 + PT2322 + PT2323, Пишем программу в Code Vision AVR...
Mik174
сообщение Mar 6 2013, 19:42
Сообщение #16


Местный
***

Группа: Свой
Сообщений: 357
Регистрация: 6-01-07
Пользователь №: 24 139



Озвученная задача - не для того, кто "я ученик, и ничего не понимаю в написание программы для ATmega16".
Вероятность что ничего не получится весьма высока.

Про аудиопроцессоры пока и не думайте. Если не в курсе что такое делитель напряжения, то туда пока нечего даже и заглядывать - все равно ничего не поймете.

В качестве совета - возьмите для начала задачу попроще и разберитесь с основами программирования МК.

Разбейте свою задачу на кусочки и понемногу с ними разбирайтесь, начиная с самого простого.
По мере освоения простых вещей постепенно сможете осмысленно переходить к более сложным.
С наскоку не получится.

Например:
1) Научиться вывести текст и значение переменной на ЖКИ, например, типа такого, "U=456", где 456 - не строка, а значение целочисленной переменной.
2) Научиться использовать АЦП и сделать простейший вольтметр, который может померить напряжение пальчиковой батарейки и вывести напряжение в кодах, полученных от АЦП на первой строке и пересчитанное в милливольты - во второй строке.
3) У Вас кнопки сделаны на основе резисторного делителя.
Подключите их к входу, на котором измеряли напряжение в предыдущем варианте.
Включите схему и понажимайте на кнопки - увидите, что каждой из них соответствует напряжение.
4) Сделайте программу распознавания какая кнопка нажата. Принцип простой - если напряжение меньше, чем U2, но больше чем U1, значит, нажата кнопка SB1. Для каждой из кнопок эти два напряжения будут своими.

Чтобы осмысленно понимать, что происходит при такой схеме подключения кнопок, надо разобраться что такое делитель напряжения.

А вообще, я посоветовал бы по началу не экономить на спичках и сделать обычное подключение кнопок - по одной на каждый вывод порта МК, для новичка это легче будет.

Если это проделаете, можно двигаться дальше.
Go to the top of the page
 
+Quote Post
Дмитрий(846)
сообщение Mar 8 2013, 15:39
Сообщение #17


Участник
*

Группа: Участник
Сообщений: 45
Регистрация: 4-03-13
Из: Украина / Харьков
Пользователь №: 75 894



Код
/********************************************************************************
***************
Project : System Sound
Version : 0.1beta
Start Date    : 5.03.2013
Complite Date : 8.03.2013
Author  : Oberemok D.M. and kovigor
Company : Home
Comments: Пpoeкт шecтикaнaльнoгo peгyлятopa гpoмкocти и ceлeктopa вxoдoв нa      
          микpocxeмax PT2322 и PT2323
            
Chip type               : ATmega16
Program type            : Application
AVR Core Clock frequency: 8,000000 MHz
********************************************************************************
*****************/
#include <mega16.h> //библиотека для работы с ATmega16
#include <i2c.h>               //Подключение библиотеки i2c
#include <lcd.h>               //Подключение библиотеки LCD
#include <stdio.h>
#include <delay.h>             //Подключение библиотеки задержки
//программирование микроконтроллеров AVR на Си - осваиваем АЦП
#include <ioavr.h>             //для кнопок
#include <intrinsics.h>        //для кнопок

#asm
   .equ __lcd_port=0x1B;PORTA  // Указываем расположение LCD
   .equ __i2c_port=0x15;PORTC   //указываем порт i2c
   .equ __sda_bit=1            //ножка SDA на 23 PIN PDIP
   .equ __scl_bit=0            //ножка SCL на 23 PIN PDIP    
#endasm  

//Физические кнопки
#define KEY___Standby   1
#define KEY___SELECT    2
#define KEY___2_1       3
#define KEY___5_1       4
#define KEY___AC-3      5
// Для удобства пины ввода-вывода сопоставляем с символическими именами - куда что подключено по схеме

#asm("sei")     // бесконечный цикл
//макрос для запуска преобразования
#define StartConvAdc()  ADCSRA |= (1<<ADSC)

void skane_key(void)
{
//ион - напряжение питания, выравнивание влево, нулевой канал
ADMUX = (0<<REFS1)|(1<<REFS0)|(1<<ADLAR)|(0<<MUX3)|(0<<MUX2)|(0<<MUX1)|(0<<MUX0);
//вкл. ацп, режим одиночного преобр., разрешение прерывания,частота преобр. = FCPU/128
ADCSRA = (1<<ADEN)|(0<<ADSC)|(0<<ADATE)|(1<<ADIE)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0);

__enable_interrupt();
StartConvAdc();
  while(1)
  {
    //какой-нибудь код
  }
  return 0;
}


//обработчик прерывания АЦП
#pragma vector=ADC_vect
__interrupt void adc_my(void)
{
   unsigned char AdcBuf = ADCH;

  //какой-нибудь код
  StartConvAdc();
}  

void main(void)
{
lcd_init(16);
PORTA=0x00; //Выставляем все выходы PORTA на ноль
DDRA=0x00;  //Выставляем все выходы PORTA как входы
{
    lcd_init(16);                 //Обнаружение LCD
    lcd_clear();                  //Очистить LCD
    lcd_gotoxy(0,0);              //указываю место последующего вывода текста
    lcd_putsf("System Sound");    //выводим
    lcd_gotoxy(0,1);              //указываю место последующего вывода текста
    lcd_putsf("Downloaded");       //выводим
    delay_ms(1500);                //задержка
    lcd_clear();                   //Очистить LCD

for (;;)
{
if(!PINA.3 > 0)  //если кнопка нажата
    {              
    lcd_clear();                  //Очистить LCD
    lcd_gotoxy(0,0);              //указываю место последующего вывода текста
    lcd_putsf("On");    //выводим
    }
else
    {
    lcd_clear();                  //Очистить LCD
    lcd_gotoxy(0,0);              //указываю место последующего вывода текста
    lcd_putsf("Off");    //выводим    
    }  
}
}
}//Main


в чем проблема не компилирует
ошибка
Error: System Sound.c(103): no matching #endif
Прикрепленные файлы
Прикрепленный файл  System_Sound.rar ( 91.98 килобайт ) Кол-во скачиваний: 21
 
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Mar 8 2013, 15:51
Сообщение #18


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Этот код вызывает сомнения, так как не находится внутри какой-либо функции(особенно #asm("sei")):
Код
/********************************************************************************

#include <mega16.h> //библиотека для работы с ATmega16
#include <i2c.h>               //Подключение библиотеки i2c
#include <lcd.h>               //Подключение библиотеки LCD
#include <stdio.h>
#include <delay.h>             //Подключение библиотеки задержки
//программирование микроконтроллеров AVR на Си - осваиваем АЦП
#include <ioavr.h>             //для кнопок
#include <intrinsics.h>        //для кнопок

#asm
   .equ __lcd_port=0x1B;PORTA  // Указываем расположение LCD
   .equ __i2c_port=0x15;PORTC   //указываем порт i2c
   .equ __sda_bit=1            //ножка SDA на 23 PIN PDIP
   .equ __scl_bit=0            //ножка SCL на 23 PIN PDIP    
#endasm  

//Физические кнопки
#define KEY___Standby   1
#define KEY___SELECT    2
#define KEY___2_1       3
#define KEY___5_1       4
#define KEY___AC-3      5
// Для удобства пины ввода-вывода сопоставляем с символическими именами - куда что подключено по схеме

#asm("sei")     // бесконечный цикл


А этот обработчик не похож на Codevision-ский:

Код
#pragma vector=ADC_vect
__interrupt void adc_my(void)

Так в ИАР АВР пишут, но может что поменялось в CV?
Go to the top of the page
 
+Quote Post
Дмитрий(846)
сообщение Mar 8 2013, 16:24
Сообщение #19


Участник
*

Группа: Участник
Сообщений: 45
Регистрация: 4-03-13
Из: Украина / Харьков
Пользователь №: 75 894



Код
/********************************************************************************
***************
Project : System Sound
Version : 0.1beta
Start Date    : 5.03.2013
Complite Date : 8.03.2013
Author  : Oberemok D.M. and kovigor
Company : Home
Comments: Пpoeкт шecтикaнaльнoгo peгyлятopa гpoмкocти и ceлeктopa вxoдoв нa      
          микpocxeмax PT2322 и PT2323
            
Chip type               : ATmega16
Program type            : Application
AVR Core Clock frequency: 8,000000 MHz
********************************************************************************
*****************/
#include <mega16.h> //библиотека для работы с ATmega16
#include <i2c.h>               //Подключение библиотеки i2c
#include <lcd.h>               //Подключение библиотеки LCD
#include <stdio.h>
#include <delay.h>             //Подключение библиотеки задержки
//программирование микроконтроллеров AVR на Си - осваиваем АЦП
#include <ioavr.h>             //для кнопок
#include <intrinsics.h>        //для кнопок

#asm
   .equ __lcd_port=0x1B;PORTA  // Указываем расположение LCD
   .equ __i2c_port=0x15;PORTC   //указываем порт i2c
   .equ __sda_bit=1            //ножка SDA на 23 PIN PDIP
   .equ __scl_bit=0            //ножка SCL на 23 PIN PDIP    
#endasm  
// Для удобства пины ввода-вывода сопоставляем с символическими именами - куда что подключено по схеме
//макрос для запуска преобразования
#define StartConvAdc() ADCSRA |= (1<<ADSC)
//Физические кнопки
#define KEY___Standby   0
#define KEY___SELECT    1
#define KEY___2_1       2
#define KEY___5_1       3
#define KEY___AC_3      4

//кнопочный буфер
volatile unsigned char KeyBuf = 0;

void skane_key(void)
{
  unsigned char tmp;
  
  //настраиваем порты
  DDRC = 0xff;
  PORTC = 0xff;

  //инициализируем АЦП
  //ион - напряжение питания, выравнивание влево, нулевой канал
  ADMUX = (0<<REFS1)|(1<<REFS0)|(1<<ADLAR)|(0<<MUX3)|(0<<MUX2)|(0<<MUX1)|(0<<MUX0);
  //вкл. ацп, режим одиночного преобразования, разрешение прерывания, частота преобр. = FCPU/128
  ADCSRA = (1<<ADEN)|(0<<ADSC)|(0<<ADATE)|(1<<ADIE)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0);

  //разрешаем прерывания и запускаем преобразование
  __enable_interrupt();
    StartConvAdc();

  //основной цикл программы - опрос кнопочного буфера
  while(1)
  {
    tmp = KeyBuf;
    if (tmp)
    {
      tmp--;
      PORTC = ~(1<<tmp);
    }
    else
      PORTC = 0xff;
  }
  return 0;
}


#pragma vector=ADC_vect
__interrupt void adc_my(void)
{
  //считываем старший регистр АЦП
  unsigned char AdcBuf = ADCH;
  
  //опеределяем в какой диапазон он попал
  if (AdcBuf > 240)
    KeyBuf = KEY___AC_3;
  else if (AdcBuf > 180)
    KeyBuf = KEY___SELECT;
  else if (AdcBuf > 120)
    KeyBuf = KEY___2_1;
  else if (AdcBuf > 50)
    KeyBuf = KEY___5_1;
  else
    KeyBuf = KEY___Standby;  
    
  //защита от дребезга и не только. если нажата какая-нибудь кнопка
  //сравниваем совпадают ли текущее состояние и предыдущее
  //если совпадают - проверяем счетчик comp, если нет обнуляем его
  //кнопка считается нажатой если она удерживается в течении 100
  //преобразований АЦП
  if (Key)
  {
    if (Key == LastState)
    {
      if (comp > 100)
        KeyBuf = Key;      
      else
        comp++;
    }
    else
    {
      LastState = Key;
      comp = 0;
    }
  }
  else
  {
    comp = 0;
    KeyBuf = KEY___Standby;
    LastState = KEY___Standby;
  }  
  //запускаем преобразование и выходим
  StartConvAdc();
}





























  

void main(void)
{
lcd_init(16);
PORTA=0x00; //Выставляем все выходы PORTA на ноль
DDRA=0x00;  //Выставляем все выходы PORTA как входы
{
    lcd_init(16);                 //Обнаружение LCD
    lcd_clear();                  //Очистить LCD
    lcd_gotoxy(0,0);              //указываю место последующего вывода текста
    lcd_putsf("System Sound");    //выводим
    lcd_gotoxy(0,1);              //указываю место последующего вывода текста
    lcd_putsf("Downloaded");       //выводим
    delay_ms(1500);                //задержка
    lcd_clear();                   //Очистить LCD

for (;;)
{
if(!PINA.3 > 0)  //если кнопка нажата
    {              
    lcd_clear();                  //Очистить LCD
    lcd_gotoxy(0,0);              //указываю место последующего вывода текста
    lcd_putsf("On");    //выводим
    }
else
    {
    lcd_clear();                  //Очистить LCD
    lcd_gotoxy(0,0);              //указываю место последующего вывода текста
    lcd_putsf("Off");    //выводим    
    }  
}
}
}//Main

тоже самое

Сообщение отредактировал Дмитрий(846) - Mar 8 2013, 16:25
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Mar 8 2013, 16:41
Сообщение #20


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(Дмитрий(846) @ Mar 8 2013, 18:24) *
тоже самое


Возможно.
Наверное потому, что всё это:

Код
#include <intrinsics.h>        //для кнопок


Код
  __enable_interrupt();


Код
#pragma vector=ADC_vect
__interrupt void adc_my(void)

CodeVision-у не известно. Выкиньте эти строки из программы и тогда компилируйте.

P.S.
Посмотрел приложенный архив (файл intrinsics.h):
Код

  This file declares the ARM intrinsic inline functions.

  Copyright 1999-2006 IAR Systems. All rights reserved.

  $Revision 34635 $



#ifndef __INTRINSICS_INCLUDED
#define __INTRINSICS_INCLUDED

#include ycheck.h

#ifndef _SYSTEM_BUILD
  #pragma system_include
#endif


  Check that the correct C compiler is used.


#if ((__TID__  8) & 0x007F) != 79
#error File intrinsics.h can only be used together with iccarm.
#endif

#ifdef __cplusplus
extern C {
#endif

#pragma language=save
#pragma language=extended

__intrinsic void    __no_operation(void);

Он у вас не только не той системы, но ещё и из другой оперы. И почему-то комментарии раскомментированы...
Go to the top of the page
 
+Quote Post
Дмитрий(846)
сообщение Mar 12 2013, 16:20
Сообщение #21


Участник
*

Группа: Участник
Сообщений: 45
Регистрация: 4-03-13
Из: Украина / Харьков
Пользователь №: 75 894



Помогите поправить синтаксис.
При выводе Volume на Максимум и Минимум, устройство ребутиться !

Сообщение отредактировал Дмитрий(846) - Mar 12 2013, 16:37
Прикрепленные файлы
Прикрепленный файл  System_Sound.rar ( 293.51 килобайт ) Кол-во скачиваний: 26
 
Go to the top of the page
 
+Quote Post
kovigor
сообщение Mar 12 2013, 17:13
Сообщение #22


Гуру
******

Группа: Свой
Сообщений: 5 273
Регистрация: 30-03-10
Пользователь №: 56 295



Цитата(Дмитрий(846) @ Mar 12 2013, 20:20) *
Помогите поправить синтаксис.
При выводе Volume на Максимум и Минимум, устройство ребутиться !

Мне сейчас некогда. А самому - никак ? Ребутится - значит, почти наверняка рушится стек. Или вы, например, где-то в программе создали массив на 10 элементов, а пишете в него не десять элементов, а больше, и этим разрушаете соседние переменные.
P.S. Вообще, не обижайтесь, но я вам по-дружески очень советую с первых же шагов учиться работать самостоятельно, особенно при решении элементарных вопросов ...
P.P.S. Лучшим отладчиком часто бывает обычный светодиод, ибо он позволяет довольно точно проследить ход выполнения программы ...

Дополню. Еще вариант - вы что-то напутали с типами данных (по ошибке используете знаковый тип как беззнаковый, или наоборот, или же путаете восьмиразрядные данные с 16-разрядными)
Дальше, по вашему исходнику. В блоке "switch" непременно должен быть "default", а не только "case 1,2,3 и проч.".
Дальше. У вас из обработчиков прерываний вызывается функция " Set_Key", которая вызывает задержку на 300 мС !!!!! Это абсолютно недопустимо. Обработчики прерывания должны выполняться почти мгновенно. Разбираться с результатами работы обработчиков нужно в фоновом процессе, но никак не прямо в самих обработчиках. Конечно, из этого правила бывают исключения, но они только подтверждают правило ...
Ладно, пока хватит. Устраните эти вопиющие недоработки, тогда посмотрим ...
Go to the top of the page
 
+Quote Post
Дмитрий(846)
сообщение Mar 12 2013, 19:03
Сообщение #23


Участник
*

Группа: Участник
Сообщений: 45
Регистрация: 4-03-13
Из: Украина / Харьков
Пользователь №: 75 894



За распознавание энкодера не понял зачем там default (все работает норм)


Вот смотри.

И вопросик правильно ли написал код выбора режима

Код
//Выбор режима роботы        
if(key == COMMAND_KEY_ok)
{
switch(mode)
  {
  case 1:                      // 2.1 mode
     i2c_start();
     i2c_write(ADDR_2323);
     i2c_write(ACK);
     i2c_write(0xf5);  // CE Выключен, включено Mute на канал // 0xf4 Включен
     i2c_write(0xf9);  // RL Выключен, включено Mute на канал // 0xf8 Включен
     i2c_write(0xfb);  // RR Выключен, включено Mute на канал // 0xfa Включен
     i2c_stop();                    
    break;
  case 2:                      // 3.1 mode
     i2c_start();
     i2c_write(ADDR_2323);
     i2c_write(ACK);
     i2c_write(0xf4);  // CE Включен, выключено Mute на канал // 0xf5 Выключен
     i2c_write(0xf9);  // RL Выключен, включено Mute на канал // 0xf8 Включен
     i2c_write(0xfb);  // RR Выключен, включено Mute на канал // 0xfa Включен
     i2c_stop();
    break;
  case 3:                      // 4.1 mode
     i2c_start();
     i2c_write(ADDR_2323);
     i2c_write(ACK);
     i2c_write(0xf5);  // CE Выключен, включено Mute на канал // 0xf4 Включен
     i2c_write(0xf8);  // RL Включен, выключено Mute на канал // 0xf9 Выключен
     i2c_write(0xfa);  // RR Включен, выключено Mute на канал // 0xfb Выключен
     i2c_stop();
    break;
  default:                     // 5.1 mode
     i2c_start();
     i2c_write(ADDR_2323);
     i2c_write(ACK);
     i2c_write(0xfe);          // Включить все каналы
     i2c_stop();
    break;
  }
}

Прикрепленные файлы
Прикрепленный файл  System_Sound.rar ( 316.72 килобайт ) Кол-во скачиваний: 16
 
Go to the top of the page
 
+Quote Post
kovigor
сообщение Mar 12 2013, 19:34
Сообщение #24


Гуру
******

Группа: Свой
Сообщений: 5 273
Регистрация: 30-03-10
Пользователь №: 56 295



Цитата(Дмитрий(846) @ Mar 12 2013, 23:03) *
За распознавание энкодера не понял зачем там default (все работает норм)

Вот смотри.

И вопросик правильно ли написал код выбора режима


Мало ли что еще работает из того, что сделано неправильно ?

Простите, но я не привык обращаться к незнакомым людям на "ты".

Правильно ли, не знаю. Чтобы ответить, нужно вникать в код и алгоритм. А мне сейчас не до этого. Могу почти точно (99.9%) уже сейчас сказать, что у вас неправильно построен сам проект, ибо в правильно построенных проектах функции задержек на 300мС из обработчиков прерываний не вызываются, но такие задержки всегда делаются в фоновом процессе. Функции обмена по I2C также очень желательно никогда не вызывать из обработчиков прерываний, ибо продолжительность их выполнения труднопредсказуема ...
Go to the top of the page
 
+Quote Post
Дмитрий(846)
сообщение Mar 12 2013, 19:58
Сообщение #25


Участник
*

Группа: Участник
Сообщений: 45
Регистрация: 4-03-13
Из: Украина / Харьков
Пользователь №: 75 894



Цитата(kovigor @ Mar 12 2013, 21:34) *
Мало ли что еще работает из того, что сделано неправильно ?

Простите, но я не привык обращаться к незнакомым людям на "ты".

Правильно ли, не знаю. Чтобы ответить, нужно вникать в код и алгоритм. А мне сейчас не до этого. Могу почти точно (99.9%) уже сейчас сказать, что у вас неправильно построен сам проект, ибо в правильно построенных проектах функции задержек на 300мС из обработчиков прерываний не вызываются, но такие задержки всегда делаются в фоновом процессе. Функции обмена по I2C также очень желательно никогда не вызывать из обработчиков прерываний, ибо продолжительность их выполнения труднопредсказуема ...


Все понял, покажите как организовать выбор default в той части кода?
Прикрепленные файлы
Прикрепленный файл  System_Sound.rar ( 320.95 килобайт ) Кол-во скачиваний: 11
 
Go to the top of the page
 
+Quote Post
kovigor
сообщение Mar 12 2013, 20:04
Сообщение #26


Гуру
******

Группа: Свой
Сообщений: 5 273
Регистрация: 30-03-10
Пользователь №: 56 295



Цитата(Дмитрий(846) @ Mar 12 2013, 22:58) *
Все понял, покажите как организовать выбор default в той части кода?

Смотря что вы хотите получить. Можно просто проигнорировать недопустимый "mode" и выйти из "switch", просто написав "break", а можно как-то обработать ошибочную ситуацию (что вы и делаете), например, выключив звук или включив лампочку - индикатор ошибки. Тут решить можете только вы, задача-то творческая ...
Go to the top of the page
 
+Quote Post
Дмитрий(846)
сообщение Mar 12 2013, 20:14
Сообщение #27


Участник
*

Группа: Участник
Сообщений: 45
Регистрация: 4-03-13
Из: Украина / Харьков
Пользователь №: 75 894



Спасибо реализовал break, а там посмотрим.
Посмотрите внимательно код, есть еще пожелания.

Подскажите расчетные данные для реализации кнопок через ацп на резитротах 4,7кОм !!!

Код
unsigned char read_key(void)
{
        unsigned char key_adc;        
        key_adc=read_adc(3);
                
          if                      (key_adc <=   3)  return KEY_STANDBY;
          if ((key_adc >= 124) && (key_adc <= 130)) return KEY_STANDBY; //KEY_VOLUME_PLUS;
          if ((key_adc >= 167) && (key_adc <= 173)) return KEY_STANDBY; //KEY_VOLUME_MINUS; //167-173 = 1630 Om
          if ((key_adc >= 188) && (key_adc <= 194)) return KEY_STANDBY; //KEY_INPUT5_1;     //167-173 = 3000 Om
          if ((key_adc >= 201) && (key_adc <= 207)) return KEY_STANDBY; //KEY_MUTE;        
}


Сообщение отредактировал Дмитрий(846) - Mar 12 2013, 20:15
Прикрепленные файлы
Прикрепленный файл  System_Sound.rar ( 306.91 килобайт ) Кол-во скачиваний: 15
 
Go to the top of the page
 
+Quote Post
kovigor
сообщение Mar 12 2013, 20:27
Сообщение #28


Гуру
******

Группа: Свой
Сообщений: 5 273
Регистрация: 30-03-10
Пользователь №: 56 295



Цитата(Дмитрий(846) @ Mar 13 2013, 00:14) *
Спасибо реализовал break, а там посмотрим.
Посмотрите внимательно код, есть еще пожелания.

Подскажите расчетные данные для реализации кнопок через ацп на резитротах 4,7кОм !!!

Код гляну завтра, сегодня уже поздно. А значения вы и сами легко вычислите, исходя из того, что это простейший делитель напряжения, а также из закона Ома и того факта, что сопротивления резисторов задаются с допуском, например, в 10%. Да, если вы используете 8-разрядный АЦП, то макс. значение на его выходе будет равно 255, имейте это в виду. Задача, действительно, простейшая. Нарисуйте на листике делитель и сразу все поймете ...
Go to the top of the page
 
+Quote Post
Дмитрий(846)
сообщение Mar 12 2013, 20:31
Сообщение #29


Участник
*

Группа: Участник
Сообщений: 45
Регистрация: 4-03-13
Из: Украина / Харьков
Пользователь №: 75 894



Цитата(kovigor @ Mar 12 2013, 22:27) *
Код гляну завтра, сегодня уже поздно. А значения вы и сами легко вычислите, исходя из того, что это простейший делитель напряжения, а также из закона Ома и того факта, что сопротивления резисторов задаются с допуском, например, в 10%. Да, если вы используете 8-разрядный АЦП, то макс. значение на его выходе будет равно 255, имейте это в виду. Задача, действительно, простейшая. Нарисуйте на листике делитель и сразу все поймете ...


Огромное спасибо, за помощь.
Go to the top of the page
 
+Quote Post
kovigor
сообщение Mar 12 2013, 20:36
Сообщение #30


Гуру
******

Группа: Свой
Сообщений: 5 273
Регистрация: 30-03-10
Пользователь №: 56 295



Цитата(Дмитрий(846) @ Mar 13 2013, 00:31) *
Огромное спасибо, за помощь.

Не за что ...

Смотрю, но он не компилируется:
if(enc >= TACT && standby_1 == 1)
Здесь после функции идет какой-то неприкаянный обрывок кода. Разбирайтесь ...

Еще раз: Старайтесь не вызывать из обработчиков прерываний функции обмена по I2C.
Проект, похоже, сделан неправильно. Советую переделать его как можно скорее, реализовав его в виде машины состояний ("state machine") - одной или нескольких:

http://www.chipenable.ru/index.php/program...te-machine.html
http://nongreedy.ru/embedded/2012/10/09/fi...-state-machine/
Вот еще, может, вам понравится:
http://easyelectronics.ru/avr-uchebnyj-kur...yj-avtomat.html
Go to the top of the page
 
+Quote Post

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

 


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


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