-
Path: news-archive.icm.edu.pl!news.rmf.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!new
sfeed.neostrada.pl!atlantis.news.neostrada.pl!news.neostrada.pl!not-for-mail
From: "Robbo" <p...@a...nie.mam>
Newsgroups: pl.misc.elektronika
Subject: AVR32 UC3B0256, dziwny problem z ADC
Date: Sun, 30 Aug 2009 12:21:01 +0200
Organization: TP - http://www.tp.pl/
Lines: 166
Message-ID: <h7djud$m22$1@atlantis.news.neostrada.pl>
NNTP-Posting-Host: dqb21.neoplus.adsl.tpnet.pl
X-Trace: atlantis.news.neostrada.pl 1251627790 22594 83.24.161.21 (30 Aug 2009
10:23:10 GMT)
X-Complaints-To: u...@n...neostrada.pl
NNTP-Posting-Date: Sun, 30 Aug 2009 10:23:10 +0000 (UTC)
X-Priority: 3
X-MSMail-Priority: Normal
X-Newsreader: Microsoft Outlook Express 6.00.2600.0000
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2600.0000
X-Antivirus: avast! (VPS 090829-0, 2009-08-29), Outbound message
X-Antivirus-Status: Clean
Xref: news-archive.icm.edu.pl pl.misc.elektronika:570058
[ ukryj nagłówki ]Witam,
Pracuję nad układem, którego sercem jest uC Atmel AVR32 UC3B0256.
Pośród innych, do układu podpięte są tranzystory i diody świecące
(wyjścia PA05, PA06, PA07, PA08). Wejście PA03 pracuje jako
wejście przetwornika analogowo-cyfrowego (kanał nr 6). PA04 nie jest
do niczego podłączone. Mam ponadto podłączony wyświetlacz LCD
(2x24) obsługiwany za pomocą mojej małej biblioteczki.
Kwarc 12MHz, uC pracuje na 60MHz.
Proszę spojrzeć na przykładowy program ilustrujący
zjawisko, które opiszę poniżej.
#include <avr32/io.h>
#include "pm.h"
#include "gpio.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdarg.h>
#include "adc.h"
#include "lcd.h"
/* w parametrach AVR32studio ustawiono USE_8_BITS_ADC,
* optymalizacja -O3
*/
#define FRCOSC AVR32_PM_RCOSC_FREQUENCY //!< Default RCOsc frequency.
#define FOSC0 12000000 //!< Osc0
frequency: Hz.
#define OSC0_STARTUP AVR32_PM_OSCCTRL0_STARTUP_2048_RCOSC //!< Osc0
startup time: RCOsc periods.
#define ADC_CHANNEL 6
#define ADC_PIN AVR32_ADC_AD_6_PIN
#define ADC_FUNCTION AVR32_ADC_AD_6_FUNCTION
static volatile avr32_adc_t * adc= (volatile avr32_adc_t *) &AVR32_ADC;
volatile avr32_gpio_port_t *gpio_port_A = &AVR32_GPIO.port[0];
void localStartPLL(void)
{
pm_switch_to_osc0(&AVR32_PM, FOSC0, OSC0_STARTUP);
pm_pll_setup(&AVR32_PM, 0, // pll.
9, // mul.
1, // div.
0, // osc.
16); // lockcount.
pm_pll_set_option(&AVR32_PM, 0, // pll.
1, // pll_freq.
1, // pll_div2.
0); // pll_wbwdisable.
pm_pll_enable(&AVR32_PM, 0);
pm_wait_for_pll0_locked(&AVR32_PM);
pm_gc_setup(&AVR32_PM, 0,1,0,0,0);
pm_gc_enable(&AVR32_PM, 0);
pm_cksel(&AVR32_PM,
0, // pbadiv.
0, // pbasel.
0, // pbbdiv.
0, // pbbsel.
0, // hsbdiv.
0); // hsbsel.
//flashc_set_wait_state(1);
pm_switch_to_clock(&AVR32_PM, AVR32_PM_MCCTRL_MCSEL_PLL0);
}
void initADC()
{
// GPIO pin/adc-function map.
static const gpio_map_t ADC_GPIO_MAP = {
{ADC_PIN, ADC_FUNCTION},
};
// Assign and enable GPIO pins to the ADC function.
gpio_enable_module(ADC_GPIO_MAP, sizeof(ADC_GPIO_MAP) /
sizeof(ADC_GPIO_MAP[0]));
// configure ADC
adc_configure(adc);
/* MCK/2, if PRESCAL is 0, and MCK/128, if PRESCAL is set to 63 (0x3F)
* ADC Clock Frequency 10-bit resolution mode, 5MHz,
* ADC Clock Frequency 8-bit resoltuion mode, 8MHz
*/
adc->mr |= 63 << AVR32_ADC_PRESCAL_OFFSET;
gpio_port_A->puerc = 1 << (ADC_PIN & 0x1F);
adc_enable(adc, ADC_CHANNEL);
}
int main(void)
{
char s[25];
localStartPLL();
gpio_local_init();
flashc_set_wait_state(1);
initLCD();
initADC();
gpio_port_A->oders = 1 << ((AVR32_PIN_PA05) & 0x1F);
gpio_port_A->ovrs = 1 << ((AVR32_PIN_PA05) & 0x1F); // !!!!!!
while(1) {
adc_start(adc);
int aaa = adc_get_value(adc, ADC_CHANNEL);
setCursorPos(24);
sprintf(s, "%d ", aaa);
showString(s);
}
return 0;
}
Jeżeli uruchomię powyżej przedstawiony program, to na wyświetlaczu LCD
pojawi się cyfra 4. Potencjometr podłączony do ADC jest skręcony na
minimum. Warto zauważyć, że PA05 jest ustawiony na 1 -- odpowiednia
dioda się świeci.
Teraz załóżmy, że modyfikujemy linię oznaczoną w kodzie znakami !!!!!!
z:
gpio_port_A->ovrs = 1 << ((AVR32_PIN_PA05) & 0x1F); // !!!!!!
na:
gpio_port_A->ovrc = 1 << ((AVR32_PIN_PA05) & 0x1F); // !!!!!!
Innymi słowy, dioda podłączona do PA05 nie będzie teraz świecić.
Co dziwne, teraz na wyświetlaczu możemy odczytać wartość 1, a nie
4, jak było to uprzednio. (Zjawisko jest powtarzalne).
Ktoś mógłby powiedzieć, że włączenie tej diody powoduje jakieś
obciążenie układu i stąd inny wynik z ADC. Ale tak chyba nie jest
bo po pierwsze wartość w takim przypadku powinna być mniejsza,
a nie większa, a po drugie sprawdzane były wszelkie napięcia i nie
wahają się one nawet o miliwolt. Ponadto, ścieżka została przecięta
przy samym uC, żeby odciąć diodę, tranzystor, itp., ale to w ogóle
nie wpłynęło na wynik (nadal włączenie PA05 powoduje, że wartość
odczytana z ADC jest inna, niż w przypadku, gdy PA05 jest wyłączone).
Dodam, że zjawisko dotyczy także innych wyjść z tranzystorami
i diodami (PA06, PA07, PA08).
Co dziwne, jeśli program zmodyfikujemy tak, że zamiast PA05
sterujemy wyjściem PA04 (do niego nic nie jest podłączone), to
wartość odczytywana z ADC jest stabilna, niezależnie od tego,
czy PA04 jest ustawione, czy wyzerowane.
Pytanie: co może być przyczyną?
Z góry uprzejmie dziękuję za rady.
Robbo
Następne wpisy z tego wątku
Najnowsze wątki z tej grupy
- Schemat automatyki
- Teoretyczne zagadnienie - ogrzewanie budynku
- Zagadka radiowa
- Prostownik
- Nowy akumulator Donut Lab
- Pilot do zamka/bramy
- Jaka myjka ultradźwiękowa?
- Retro organizer ale współcześnie
- Skąd diody LED 1,5V?
- Apollo Comm
- PICkit3 mnie pokonał
- LEDy na choinkę zdechły
- Wtopa LED
- Miało być zniesienie abonamentu RTV, a jest podwyżka!!!
- Microsoft, C/C++ na Rust - news
Najnowsze wątki
- 2026-01-12 Schemat automatyki
- 2026-01-12 Xiaomi [Chiny - przyp. JMJ] produkuje w całkowitych ciemnościach i bez ludzi
- 2026-01-12 Polska Grupa Zbrojeniowa (85% udziałów) Likwiduje Stomil-Poznań - Zakład Działał Od 1928r.
- 2026-01-12 Teoretyczne zagadnienie - ogrzewanie budynku
- 2026-01-12 Xiaomi [Chiny - przyp. JMJ] produkuje w całkowitych ciemnościach i bez ludzi
- 2026-01-12 Xiaomi [Chiny - przyp. JMJ] produkuje w całkowitych ciemnościach i bez ludzi
- 2026-01-12 Polska Grupa Zbrojeniowa (85% udziałów) Likwiduje Stomil-Poznań - Zakład Działał Od 1928r.
- 2026-01-12 Xiaomi [Chiny - przyp. JMJ] produkuje w całkowitych ciemnościach i bez ludzi
- 2026-01-12 Usunięcie zdjęcia zamordowanej kobiety: Policja 3 dni nie zawracała sądowi dupy i załatwiła bez sądu [TVN donosi na kogoś]
- 2026-01-12 Policjant (poza służbą) agresywny wobec kobiety 2 [Szczecin, Sylwester]
- 2026-01-12 Warszawa => BI Developer <=
- 2026-01-11 Rząd wzywa prezydenta to dyskryminacji/bojkotu "formalnie niekaranych"? :-)
- 2026-01-11 Po zniszczeniu w okolicy Lwowa [Ukraina] fabryki dronów przenoszą ją do Polski
- 2026-01-11 Auta spalinowe tylko dla zarządu. Tak UE ratuje spalinową motoryzację
- 2026-01-11 Dziki trener ZIELONY ŁAD W KRAKOWIE: WIELKI PRZEKRĘT CZY RATUNEK?




5 Najlepszych Programów do Księgowości w Chmurze - Ranking i Porównanie [2025]