Mám takový problém A/D převodník používat umím ale jak ho nastavit aby po sobě (třeba každou 1ms) střídal vstupy (ADC0-ADC7) a zapsal si každou hodnotu kterou změřil ? díky za nějaký nástřel v cčku
Využití jednoho A/D převodníku s více vstupy
Moderátor: Moderátoři
- agadirCZ44
- Příspěvky: 17
- Registrován: 05 led 2015, 00:00
Využití jednoho A/D převodníku s více vstupy
Mám takový problém A/D převodník používat umím ale jak ho nastavit aby po sobě (třeba každou 1ms) střídal vstupy (ADC0-ADC7) a zapsal si každou hodnotu kterou změřil ? díky za nějaký nástřel v cčku
- ZdenekHQ
- Významný člen
- Příspěvky: 25519
- Registrován: 21 črc 2006, 00:00
- Bydliště: skoro Brno
- Kontaktovat uživatele:
Ale obecně to převodníky neumí, musíš navzorkovat, přečíst, uložit někam do paměti, přepnout na další vstup atd.
Správně navržené zapojení je jako recept na dobré jídlo.
Můžete vynechat půlku ingrediencí, nebo přidat jiné,
ale jste si jistí, že vám to bude chutnat[?]
Kód: Vybrat vše
uint8_t buff[8];
volatile uint8_t int_buff[8];
volatile uint8_t int_i;
// every 1 ms
ISR TCNT0_OVF
{
int_buff[int_i] = adc_get_value();
int_i++;
int_i = int_i & 0x03;
adc_set_channel(int_i); // [edit1, přepnutí kanálu až po převodu]
}
setup()
{
adc_setup();
adc_set_channel(0);
tcnt0_setup();
interrupt_setup();
sei();
}
loop()
{
cli();
memcpy( &buff , &int_buff, 8);
sti();
printf("ADC0=%d\n", buff[0]);
printf("ADC1=%d\n", buff[1]);
printf("ADC3=%d\n", buff[3]);
}
Smajlíky umí někdy otravovat. Je lepší to dávat do CODE. ZdenekHQ
edit1, přepnutí kanálu až po převodu
- agadirCZ44
- Příspěvky: 17
- Registrován: 05 led 2015, 00:00
Není na to nějaký fígl jak to zrychlit aspoň na 1ms ?
- ZdenekHQ
- Významný člen
- Příspěvky: 25519
- Registrován: 21 črc 2006, 00:00
- Bydliště: skoro Brno
- Kontaktovat uživatele:
Ty za stovku mají i 8 vstupů, třeba MCP3208. Dají se i přetaktovat výš za cenu ztráty rozlišení.
Správně navržené zapojení je jako recept na dobré jídlo.
Můžete vynechat půlku ingrediencí, nebo přidat jiné,
ale jste si jistí, že vám to bude chutnat[?]
Když použiješ jednoduchý převod (v registru ADCSRA nastavíš bit ADCS), tak první převod po zapnutí bude trvat 25 cyklů A/D převodníku, další pak 13 cyklů. To při frekvenci 200kHz A/D vychází na 125µs pro první, na další pak 65µs. Když Ti bude stačit nižší rozlišení (8bitů), lze A/D převodník taktovat až na 1MHz.
A/D převodník v ATMega16 není tak línej
- agadirCZ44
- Příspěvky: 17
- Registrován: 05 led 2015, 00:00
- agadirCZ44
- Příspěvky: 17
- Registrován: 05 led 2015, 00:00