Operácie

AVR StampPlotExample.c

Z SensorWiki

Verzia z 20:23, 11. november 2011, ktorú vytvoril Balogh (diskusia | príspevky)
(rozdiel) ← Staršia verzia | Aktuálna úprava (rozdiel) | Novšia verzia → (rozdiel)
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <avr/io.h>
#include <util/delay.h>


#define BAUDRATE       9600
#define BAUD_PRESCALE  (((F_CPU / (BAUDRATE * 16UL))) - 1)

void inituart(void)   /* Initialize UART */
{                                                       
   UBRR0 = (unsigned char)BAUD_PRESCALE;                // Set baud rate
   UCSR0B = (1 << RXEN0) | (1 << TXEN0);                // Enable receiver and transmitter
   UCSR0C = (1<<USBS0)|(3<<UCSZ00);                     // Set format: 8data, 2stop bit
}

void sendchar (char c)
{
   while ( !( UCSR0A & (1<<UDRE0)) ) ;                 // Wait for empty transmit buffer
   UDR0 = c;                                           // Send the byte
}


FILE mystdout = FDEV_SETUP_STREAM(sendchar, NULL, _FDEV_SETUP_WRITE);
                              // 'sendchar' je nova funkcia pre jeden znak

int main(void)
{
 unsigned char c;
 float x=0.0;
 inituart();	                   // Inicializacia seriovej linky
 stdout = &mystdout;               // Odteraz funguje printf();

 printf("!RSET\r");                // Reset vymaze okno
 printf("!TITL Lahky Priklad\r");  // Nazov okna
 printf("!SPAN -5, 45\r");         // Rozpatie pre analogove veliciny
 printf("!PNTS 1250\r");           // Pocet bodov ktore kreslime
 printf("!TMAX 30\r");             // Casova os 30 sekund
 printf("!MAXS\r");                // Na konci stoj
 printf("!TSMP ON\r");             // Casove znacky ANO
 printf("!CLRM\r");                // Vymaz okienko na spravy
 printf("!PLOT ON\r");             // Kreslenie ANO
 printf("!RSET\r");                // Restart s novymi parametrami
 _delay_ms(200);                   // Kratka 200 ms prestavka aby sa
                                   // vyprazdnil buffer v PC
 for (;;)
 {
  c = (char)rand();                        
  printf("%d,%d\r",(int)(100*(sin(x)+1)),c); 
  if (c>245)
    printf("Alarm! Temperature HIGH!!!\r");
  if (c<5)
    printf("Alarm! Temperature LOW!!!\r");
  _delay_ms(300);
  x=x+0.1;
  }
 return 0;
} /* End Of Main */