Operácie

Program AVR04

Zo stránky SensorWiki

Verzia z 21:52, 6. november 2008, ktorú vytvoril Balogh (diskusia | príspevky)
(rozdiel) ← Staršia verzia | Aktuálna úprava (rozdiel) | Novšia verzia → (rozdiel)
//*****************************************************************************
// File Name	: test.c
// 
// Title		: Priklad na pouzitie kniznice avrlib a stampplot
// Revision		: 1.0
// Notes		:	
// Target MCU	: Atmel AVR series
// Editor Tabs	: 4
// 
// Revision History:
// When			Who			Description of change
// -----------	-----------	-----------------------
// 18-Nov-2005	balogh		Created the program
//*****************************************************************************

//----- Include Files ---------------------------------------------------------
#include <avr/io.h>		// include I/O definitions (port names, pin names, etc)
#include <avr/signal.h>	// include "signal" names (interrupt names)
#include <avr/interrupt.h>	// include interrupt support

#include "global.h"		// include our global settings
#include "uart.h"		// include uart function library
#include "rprintf.h"	// include printf function library
#include "a2d.h"		// include A/D converter function library
#include "timer.h"		// include timer function library (timing, PWM, etc)
#include "lcd.h"

//----- Begin Code ------------------------------------------------------------
int main(void)
{
	u08 a=0;
	int i,j;

	// inicializacia kniznicnych funkcii

	// initializacia UART (seriova linka)
	uartInit();
	// nastavime prenosovu rychlost 9600 baudov pre v/v funkcie (napr. rprintf)
	uartSetBaudRate(9600);

	// inicializacia v/v funkcie rprintf
	// - ako parameter pouzijeme 'uartSendByte' co znamena, ze 
	//   vsetky funkcie z kniznice rprintf.h budu mat vystup presmerovany
	//   na seriovu linku
	// - rprintf mozeme pouzit na cokolvek, co zvlada znakovy vystup
	//   Staci si napisat vlastnu funkciu, ktora ma jediny parameter typu
        //   unsigned char a preinicializujete rprintf so smernikom na tuto funkciu:
	//   napriklad takto: rprintfInit(lcdSendByte);
	rprintfInit(uartSendByte);

	// zapneme a inicializujeme A/D prevodnik
	a2dInit();
	// inicializujeme aj casovace
	timerInit();
	// a posleme na seriovu linku (do nejakeho terminalu na PC) kratku spravu, 
    // ze az potialto vsetko fungovalo...
	rprintf("\r\nInicializacia a pripojenie OK!\r\n");

        /* Inicializacia a konfiguracia programu na kreslenie grafov */


	
    timerPause(500);                   // Kratka 500 ms prestavka aby sa
									   // vyprazdnil buffer v PC
	rprintf("!RSET\r");                // Reset vymaze okno
	rprintf("!TITL Lahky Priklad\r");  // Nazov okna
	rprintf("!SPAN 0, 255\r");         // Rozpatie pre analogove veliciny
	rprintf("!PNTS 300\r");            // Pocet bodov ktore kreslime
	rprintf("!TMAX 30\r");             // Casova os 30 sekund (t.j. Tvz=0,1 s)
	rprintf("!MAXS\r");                // Na konci stoj
	rprintf("!TSMP ON\r");             // Casove znacky ANO
	rprintf("!CLRM\r");                // Vymaz okienko na spravy
	rprintf("!PLOT ON\r");             // Kreslenie ANO
	rprintf("!RSET\r");                // Restart s novymi parametrami
                                       // Kratka 200 ms prestavka aby sa
    timerPause(200);                   // vyprazdnil buffer v PC

	

	DDRA = 0x00;                       // Kvoli AD prevodniku
	PORTA = 0x00;

    rprintf("Kreslenie zacina: \r\n"); // sprava pre uzivatela do okienka pri grafe


   /* Cyklus v ktorom si kreslime jednu analogovu velicinu a dve cislicove */
  
  for (i=1;i<300;i++)   // nakreslime 300 bodov
   {
       rprintf("%d\r",a2dConvert8bit(1));     // Dekadicke cislo sa chape ako hodnota pre graf
       //  Ak chceme kreslit v zlozitejsej verzii viac velicin, oddeluju sa ciarkou:
       //  rprintf("%d,%d\r",a2dConvert8bit(0),a2dConvert8bit(1));

       rprintf("%%%d%d\r",(inb(PIND)&0x04?1:0),(inb(PIND)&0x10?1:0));    
                                      // Retazec %01 sa zobrazi ako dve bitove premenne, nula a jednotka

       timerPause(100);               // "Perioda vzorkovania" 0,1 s
   }

rprintf("Koniec prekazky - hotovo!\r\n");




/*
	// display a bargraph of the analog voltages on a2d channels 0,1
	while(1)
	{
		lcdProgressBar(a2dConvert8bit(1), 255, 16);
		lcdGotoXY(0,1);
		rprintf("x: %d", a2dConvert8bit(1));
		rprintf(" No.: %d", a++);
		
		//lcdGotoXY(0,1);
		//lcdProgressBar(a2dConvert8bit(1), 255, 20);
		//rprintf(" Y: %d", a2dConvert8bit(1));
	}
*/

	return 0;
}