JednoduchA programova rutina - AD

Sem možete napísať ak potrebujete niečo vyrobiť napr. plošný spoj alebo nejaké zariadenie...

Moderátori: Merak, Moderátori

jp1
Okoloidúci
Okoloidúci
Príspevky: 22
Dátum registrácie: 30 Jan 2008, 00:00
Bydlisko: handlova

JednoduchA programova rutina - AD

Príspevok od používateľa jp1 » 17 Feb 2013, 11:30

zdravím všetkých avr-specialistov
prosím napíšte mi "NIEKDO"jednoduchu programovu rutinu
pre attiny13a potrebujem toto:
...prečitaj adc hodnotu na pineč.5
...ak je adc hodnota menšia ako 200 tak pinč.6 je LOW
...ak je adc hodnota väčšia ako 200 tak pinč,6 je HIGH
... v nekonečnej slučke ???
vopred dakujem
0

Používateľov profilový obrázok
awen
Power user
Power user
Príspevky: 609
Dátum registrácie: 11 Feb 2009, 00:00
Bydlisko: Bratislava
Vek: 36

Re: ATMEL ATMEGA8

Príspevok od používateľa awen » 18 Feb 2013, 12:12

jp1 napísal:zdravím všetkých avr-specialistov
prosím napíšte mi "NIEKDO"jednoduchu programovu rutinu
pre attiny13a potrebujem toto:
...prečitaj adc hodnotu na pineč.5
...ak je adc hodnota menšia ako 200 tak pinč.6 je LOW
...ak je adc hodnota väčšia ako 200 tak pinč,6 je HIGH
... v nekonečnej slučke ???
vopred dakujem

Pin 5 (v DIL puzdre) nie je vstup pre A/D prevodnik. Dal som ti to na pin 7.
Tu je kod + hex v prilohe

Kód: Vybrať všetko

#define F_CPU	9600000UL
#include <avr/io.h>

#define ADC_CHANNEL		1	// (PB2, pin 7)
#define OUTPUT_BIT		1	// (PB1, pin 6)

// Run single A/D conversion and return result
unsigned int read_adc() {
	// Start the AD conversion
	ADCSRA |= (1 << ADSC);
	// Wait for the AD conversion to complete
	while ((ADCSRA & (1 << ADIF)) == 0);
	// Clear flag
	ADCSRA |= (1 << ADIF);
	return ADC;
}

int main(void)
{
	// Init I/O
	DDRB |= (1 << OUTPUT_BIT);

	// Init ADC
	// - channel: ADC_CHANNEL (pin PB2)
	// - reference: Vcc
	// - ADC prescaler: /64 (150kHz @ 9.6MHz)
	ADMUX = ADC_CHANNEL;
	ADCSRA = (1 << ADEN) | (1 << ADPS1) | (1 << ADPS2);

	while(1)
	{
		if (read_adc() < 200)
			PORTB &= ~(1 << OUTPUT_BIT);
		else
			PORTB |= (1 << OUTPUT_BIT);
	}
}
Prílohy
ADC_tiny13.hex
(238 Bajtov) 22 stiahnutí
0

jp1
Okoloidúci
Okoloidúci
Príspevky: 22
Dátum registrácie: 30 Jan 2008, 00:00
Bydlisko: handlova

Re: ATMEL ATMEGA8

Príspevok od používateľa jp1 » 18 Feb 2013, 17:56

Prvom rade díki za rutinu!!!
neuvedomil som si že pin č.5 nieje"adc" išlo mi vlastne o princíp a nie o konkrétny pin
môžeš mi ešte poradiť ako nastaviť configuration bits pre toto konkrétne zapojenie
0

Používateľov profilový obrázok
awen
Power user
Power user
Príspevky: 609
Dátum registrácie: 11 Feb 2009, 00:00
Bydlisko: Bratislava
Vek: 36

Re: ATMEL ATMEGA8

Príspevok od používateľa awen » 18 Feb 2013, 17:58

myslis fuse byty? nechaj default od vyroby a bude ok
0

jp1
Okoloidúci
Okoloidúci
Príspevky: 22
Dátum registrácie: 30 Jan 2008, 00:00
Bydlisko: handlova

Re: JednoduchA programova rutina - AD

Príspevok od používateľa jp1 » 18 Feb 2013, 18:31

ok
nebudem nič meniť aj tak mam len zle skúsenosti ...
minule sa mi totiž to podarilo zamknúť 2 atmega8čky
tak teraz musím kúpiť novú aby som ich skúsil "zobudiť...
0

jp1
Okoloidúci
Okoloidúci
Príspevky: 22
Dátum registrácie: 30 Jan 2008, 00:00
Bydlisko: handlova

Re: JednoduchA programova rutina - AD

Príspevok od používateľa jp1 » 18 Feb 2013, 18:39

nemáš náhodou nejake rozumné slovenske vysvetlivky na nastavovanie fuse bitov
0

Používateľov profilový obrázok
awen
Power user
Power user
Príspevky: 609
Dátum registrácie: 11 Feb 2009, 00:00
Bydlisko: Bratislava
Vek: 36

Re: JednoduchA programova rutina - AD

Príspevok od používateľa awen » 18 Feb 2013, 18:46

0

jp1
Okoloidúci
Okoloidúci
Príspevky: 22
Dátum registrácie: 30 Jan 2008, 00:00
Bydlisko: handlova

Re: JednoduchA programova rutina - AD

Príspevok od používateľa jp1 » 18 Feb 2013, 19:09

pre mňa je dôležite ako označiť bity keď použijem externý kryštál ako označiť bity pre vnútorný oscilátor
0

Napísať odpoveď