/*******************************************************************************/
/* PROPOX */
/* www.propox.com */
/* */
/* Program demonsturjacy dzilanie przetwornika ADC - PC0 wejscie analogowe. */
/* This program show how to use ADC converter - PC0 analog input. */
/*******************************************************************************/
// wewnetrzny zegar 1MHz (internal oscillator 1MHz)
// PD0 - R/S
// PD1 - E
// PD2 - D4
// PD3 - D5
// PD4 - D6
// PD5 - D7
// ADC
// PC0 - ADJ1
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/signal.h>
#include <avr/sleep.h>
#include "char_code.h"
#include "LCD_lib.h"
volatile uint8_t value;
volatile uint8_t value_bit[8];
const uint8_t wartosc[] = ("ADC val:");
//przerwanie z przetwornika ADC
SIGNAL(SIG_ADC)
{
uint8_t i;
value = ADCH;
//wartosc z przetwornika
for(i=0;i<8;i++){
value_bit[i] = ((value & 0x80)>>7)|0x30;
value = value << 1;
}
LCDGotoXY(8,1);
LCDstring(value_bit,8);
ADCSRA = _BV(ADEN)|_BV(ADIE)|_BV(ADSC)|_BV(ADPS1)|_BV(ADPS0);
}
int main(void)
{
//LCD
LCDinit();
LCDcursorOFF();
LCDGotoXY(0,1);
LCDstring(wartosc,8);
//Sleep mode
set_sleep_mode(SLEEP_MODE_ADC);
//ADC
ADMUX = _BV(REFS0)|_BV(ADLAR);
ADCSRA = _BV(ADEN)|_BV(ADIE)|_BV(ADSC)|_BV(ADPS1)|_BV(ADPS0);
//Przerwania wlaczone
sei();
//Sleep
sleep_mode();
while(1)
{
}
return 0;
}
Kod przedstawia wyświetlenie wartości z przetwornika na 8 bitach na wyświetlaczu. Problem w tym że nijak nie mogę tego ogarnąć dziesiętne czyli w zakresie 0 do 255
teoretycznie zmienna value_bit[8] to tablica i wystarczy ją przemieść i zamienić na dziesiętne tak jak w normalnym c pod DEW C++ funkcja działała i zamieniała poprawnie.
-przetwornik okrojony do 8 bitów
- potrzebuje tego do sterowania potencjometrycznego (kręcę potencjometrem to np wypełnienie pwm się zmienia)
Jak by ktoś mógł wskazać jak to poprawnie zamienić albo poprawić kod to bym był wdzięczny bo mi bzdury wychodzą np(liczy poprawnie do 124 potem spada na 74 liczy i taka herezja cały czas)
od razu zaznaczam że przeglądnąłem forum z góry na duł jednak ja mam gotową płytę z propox'a i powinno wszystko działać bez budowania super wielkiego układu elektronicznego w załączniku schemat BEZ PROWIZJI
Tak więc jak by ktoś miał hwilę to prosił bym o pomoc bo ja nie daje rady