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

 
 
> Подключения АЦП, Глючит и ничего не показывает
AnKing
сообщение Feb 3 2008, 17:56
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 56
Регистрация: 2-02-08
Пользователь №: 34 686



Задача: Собрать устройство которое будет выключать светодиод порта В при изменении освещения ниже допустимого уровня

Средства:
-Atmega8
-Фотодиод ФД265А
-LCD Для вывода резцльтата ацп на экран

Реализация:
Подключаю AVCC, AREF, длинную ногу фотодиода к +5V
AGND к GND;

PC0(ADC0) подключаю к короткой ноге фотодиода и через резистор 5КОм в GND

Код программы на С:
Код
#include <mega8.h>
#include <delay.h>
#include <stdlib.h>

// Alphanumeric LCD Module functions
#asm
   .equ __lcd_port=0x12;PORTD
#endasm
#include <lcd.h>

// Declare your global variables here

char sstr[10];

interrupt [ADC_INT]  void  adc_isr(void)
{
PORTB = (1<<0);
lcd_gotoxy(0,1);
lcd_putsf("RABOTAET");
lcd_gotoxy(0,0);
lcd_putchar(ADCH);
//delay_ms(127);
//ADCSRA|=0x40;
#asm ("cli")
}

void __init_mk(void) {
DDRB=0xFF;
PORTB=0xFF;

ADCSRA=0x8F;

ADMUX=0;

#asm("sei")
}


void main(void)
{
lcd_init(16);

lcd_clear();

__init_mk();

ADCSRA|=0x40;

while (1)
      {
      PORTB = (1<<0);
      lcd_gotoxy(7,1);
      //lcd_putchar(rand());
      itoa(rand(),sstr);
      lcd_puts(sstr);
      lcd_gotoxy(13,1);
      lcd_putchar(sstr[2]);
      delay_ms(25);
      
ADCSRA|=0x40;
      PORTB = (0<<0);
      delay_ms(150);
      };
}

Прерывания повторяются нормально, но вот число выводимое на дисплей - константно и равно - 838(с каким-то странным префиксом - черный квадрат без двух точек внизу слева)

Что я сделал неправильно?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
AnKing
сообщение Feb 4 2008, 15:30
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 56
Регистрация: 2-02-08
Пользователь №: 34 686



Зашиваю этот код в контроллер и он виснет, ADC0 вообще отпаял от схемы

Код
#include <mega8.h>
#include <delay.h>
#include <stdlib.h>

// Alphanumeric LCD Module functions
#asm
   .equ __lcd_port=0x12;PORTD
#endasm
#include <lcd.h>

// Declare your global variables here

char sstr[10];

interrupt [ADC_INT]  void  adc_isr(void)
{
lcd_gotoxy(0,1);
lcd_putsf("RABOTAET");
lcd_gotoxy(0,0);
//ADCL = 0xFF;
lcd_gotoxy(11,0);
itoa(ADCL,sstr);
lcd_puts(sstr);

lcd_gotoxy(9,1);

ADCSRA|=0x40;        ///если закомментировать эту строку
//#asm ("cli")            //на экран выводится   255
}


void __init_mk(void) {

ADCSRA=0x8F;

ADMUX=0;
#asm("sei")
}


void main(void)
{
lcd_init(16);

lcd_clear();

__init_mk();

ADCSRA|=0x40;

while (1)
      {
      PORTB = (1<<0);
      
      lcd_gotoxy(0,0);
      itoa(ADCL,sstr);
      lcd_puts(sstr);        //выводит 255
      
      lcd_gotoxy(8,0);
      itoa(ADCH,sstr);
      lcd_puts(sstr);       //выводит 3
      
      
      lcd_gotoxy(9,1);
      //lcd_putchar(rand());
      itoa(rand(),sstr);
      lcd_puts(sstr);
      lcd_gotoxy(15,1);
      lcd_putchar(sstr[2]);
      delay_ms(25);
      
      ADCSRA|=0x40;
      PORTB = (0<<0);
      delay_ms(150);
      };
}


Подключаю ADC0 к GND и к +5V ничего не помогает, на дисплее всеравно висяк.
Go to the top of the page
 
+Quote Post
=GM=
сообщение Feb 4 2008, 17:00
Сообщение #3


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



Цитата(AnKing @ Feb 4 2008, 15:30) *
Зашиваю этот код в контроллер и он виснет, ADC0 вообще отпаял от схемы. Подключаю ADC0 к GND и к +5V ничего не помогает, на дисплее все равно висяк

Ну, а зачем вы запускаете преобразование и в прерывании и в фоне? Думаете, быстрее получится? Ничего подобного, прерывание еще не завершилось, а вы его сбрасываете в фоне. Добейтесь сначала результата при работе по ожиданию (в фоне), на прерывания потом перейдёте.


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post



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

 


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


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