Atmega32 AD převodník

Diskuze a poradna o programátorech a programování různých obvodů

Moderátor: Moderátoři

Odpovědět
Zpráva
Autor
Uživatelský avatar
pepabruna
Příspěvky: 33
Registrován: 25 říj 2010, 00:00

Atmega32 AD převodník

#1 Příspěvek od pepabruna »

Zdravím, začínám s programováním na kitu evb4.3 a chtěl bych vytvořit takovýto program.

Na vstup převodníku např.PINA.0 budu přivádět napětí a výsledek chci zobrazovat na diodách připojených k portu B. Dejme tomu, že chci zobrazit pouze registr ADCL(mám pouze 8diod takže výsledek ADCW nelze celý zobrazit). Začal jsem takto:

#include <avr/io.h>
#include <util/delay.h>

int main(void)
{
DDRB=0xFF;
ADMUX=0;
ADCSRA=0x40;
PORTB=ADCL;

}

A ještě bych prosil o vysvětlení jak fungují tyto příkazy




#include <avr/io.h>


int main (void) //hlavní funkce
{

DDRB = 0xff; //(0xff = 0b11111111) -> Piny 0 - 7 portu "B" budou výstupní
DDRD = 0; //Port "D" bude vstupní (tlačítko je připojeno k portu "D")

while (1)
{


if(PIND & 0b00000001)

{
PORTB = 0b11110000; //Rozsviť vybrané ledky
}
else
{
PORTB = 0; //zhasni všechny ledky
}

}

}

celkem všemu rozumím až na toto: if(PIND & 0b00000001)
nerozumím tomu jak funguje tento příkaz. Proč nefunguje klasické porovnání if(PIND == 0b00000001)??
Tlačítka jsou připojena přes zem přímo k pinům uPC. Děkuji za odpovědi.
Uživatelský avatar
Habesan
Příspěvky: 7376
Registrován: 12 led 2009, 00:00
Bydliště: Plzeňsko
Kontaktovat uživatele:

#2 Příspěvek od Habesan »

pepabruna píše:if(PIND & 0b00000001)

Střelím od boku: ampersand plní funkci AND pin po pinu a celkový výraz je vyhodnocení zda nejméně významný bit se rovná jedné.

Záleží jestli PIND je deklarován jako jeden jednobitový pin, nebo jako celý osmibitový port.
Sháním hasičák s CO2 "sněhový", raději funkční.
(Nemusí mít platnou revizi.)
(Celkově budu raději, když se to obejde bez papírů.)
Uživatelský avatar
petus
Příspěvky: 594
Registrován: 12 led 2009, 00:00
Bydliště: Pelhřimov
Kontaktovat uživatele:

#3 Příspěvek od petus »

if(!(PIND&(1<<PD0)))
{
}


nebylo by tohle lepší?
Pokud něco chcete a neodpovídám,pošlete SZ :)
https://chiptron.cz - novinky ze světa elektro (Arduino, Raspberry Pi, ESP8266, STM32, ESP32...)
Peťus
Andrea
Příspěvky: 9340
Registrován: 07 zář 2007, 00:00

#4 Příspěvek od Andrea »

pepabruna píše:int main(void)
{
DDRB=0xFF;
ADMUX=0;
ADCSRA=0x40;
PORTB=ADCL;
}

Takhle ti to fungovat nebude. A/D převodník je potřeba zapnout, správně nakonfigurovat (ty máš zvenku připojenou referenci?), spustit převod, počkat na konec převodu a pak teprve lze přečíst výsledek.
A co má ten program dělat, až ten výsledek přečte?
Uživatelský avatar
Atlan
Příspěvky: 4514
Registrován: 10 kvě 2004, 00:00
Bydliště: Košice

#5 Příspěvek od Atlan »

Mensia reklama na webe svetelktro robia nieco sAD prevodnikom tak sa inspiruj... http://svetelektro.com/clanky/programuj ... t-472.html
Odpovědět

Zpět na „Programování PIC, ATMEL, EEPROM a dalších obvodů“