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

 
 
> Помогите с АЦП
Ogonik
сообщение Dec 15 2006, 00:26
Сообщение #1





Группа: Новичок
Сообщений: 3
Регистрация: 2-12-06
Пользователь №: 23 033



Вобщем проблема следующая (только начал писать, так что вопрос может быть тупым):

работаю с mega16.
нужно поргнать через АЦП последовательность, которая читается из внешнего файла.
Для этого я цепляю немного измененный SetupAdvanced.mac из туториала. Изменения соответственно сделаны по адресу входного файла и по адресу прерывания.

После make ошибок и предупреждений нету.

Код:
Код
// enable use of extended keywords
#pragma language=extended
#include <iom16.h>
#include <stdio.h>
#include <inavr.h>
#include <main.h> // пользовательский хедер

#ifndef ENABLE_BIT_DEFINITIONS
#define ENABLE_BIT_DEFINITIONS
// Enable the bit definitions in the iom16.h file
#endif

void InitADC(void)
{//REFS1,REFS0,ADLAR,MUX4,MUX3,MUX2,MUX1,MUX0 reverse
  MUX = ((1<<0)|(0<<1)|(0<<2)|(0<<3)|(0<<4)|(0<<5)|(0<<6)|(0<<7));
//ADEN,ADSC,ADATE,ADIF,ADIE,ADPS2,ADPS1,ADPS0 reverse
  ADSR1= ((1<<0)|(0<<1)|(1<<2)|(1<<3)|(0<<4)|(0<<5)|(1<<6)|(1<<7));
}

void InitPort(void)
{
DDRA=0x00;
DDRB=0xff;
}

void do_foreground_process( void )
{
  putchar('.');
}

// The showstopper
int callCount = 0;

// IRQ handler
#pragma vector=ADC_vect
__interrupt void irqHandler(void)
{
  int a_1 = ADC;
  ADC=0;
  int out=a_1;
  
    unsigned int dec = 10, temp;

  putchar ( '\n' );//перенос строки
  //выделение десятков и единиц
  
  while ( dec <= out ) //10^x dec ближайшее значение
  dec *= 10;

  while ( (dec/=10) >= 10 )
  {
    temp = out/dec;
    putchar ( '0' + temp );
    out -= temp*dec;
  }

  putchar ( '0' + out );

  // increment the show stopper
  ++callCount;

}

main( void )
{
  InitADC();
  InitPort();  

  __enable_interrupt();

  /* now loop 'forever', taking input when interrupted */
  while (1)
  {
    do_foreground_process();
  }

}


проблема в следующем: функция Accsess() почему-то вызывается дважды при попадании на это прерывание, а нужно чтобы было один раз, поскольку значения в ADC складываются.
Код
Fri Dec 15 00:13:43 2006: Loaded macro file: E:\Учеба\MC\new\SetupAdvanced.mac
Fri Dec 15 00:13:43 2006: Loaded debugee: E:\Учеба\MC\new\Debug\Exe\new.d90
Fri Dec 15 00:13:43 2006: Target reset
Fri Dec 15 00:13:43 2006: execUserReset() called
Fri Dec 15 00:13:43 2006: execUserSetup() called
Fri Dec 15 00:13:45 2006: Access() called
Fri Dec 15 00:13:45 2006: ADC = 0x00000001
Fri Dec 15 00:13:45 2006: Access() called
Fri Dec 15 00:13:45 2006: ADC = 0x00000001
Fri Dec 15 00:13:45 2006: Breakpoint hit: Code @ main.c:39.7


Что посоветуете, может это можно как-нибудь по-другому сделать?
И если можно по-быстрее курсач на следующей неделе сдавать, а в AVR Studio писать не охота, да и очень хочется на С научиться нормально писать.

Заранее всем спасибо! smile.gif

p.s. Извиняюсь, что ошибся разделом... blush.gif

Сообщение отредактировал Ogonik - Dec 15 2006, 00:46
Go to the top of the page
 
+Quote Post



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

 


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


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