Operácie

AVR StampPlotExample.c: Rozdiel medzi revíziami

Z SensorWiki

 
Riadok 1: Riadok 1:
 
<source lang="c">
 
<source lang="c">
#define F_CPU 18432000UL     
 
 
 
#include <stdio.h>
 
#include <stdio.h>
#include <avr\io.h>
+
#include <stdlib.h>
#include <util\delay.h>
+
#include <math.h>
#include "serial.h"   
+
#include <avr/io.h>
 +
#include <util/delay.h>
  
  
int main(void) {
+
#define BAUDRATE      9600
  unsigned char i,j;
+
#define BAUD_PRESCALE  (((F_CPU / (BAUDRATE * 16UL))) - 1)
  
   DDRD = 0b00000010;
+
void inituart(void)  /* Initialize UART */
  PORTD = 0b00000011;
+
{                                                     
  inituart();
+
   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
 +
}
  
static FILE mystdout = FDEV_SETUP_STREAM(sendchar, NULL,_FDEV_SETUP_WRITE);
+
void sendchar (char c)
stdout = &mystdout;
+
{
 +
  while ( !( UCSR0A & (1<<UDRE0)) ) ;                 // Wait for empty transmit buffer
 +
  UDR0 = c;                                           // Send the byte
 +
}
  
/* Inicializacia grafickeho prgoramu */
 
  
_delay_ms(500);                   // Kratka 500 ms prestavka aby sa
+
FILE mystdout = FDEV_SETUP_STREAM(sendchar, NULL, _FDEV_SETUP_WRITE);
                                  // vyprazdnil buffer v PC
+
                              // 'sendchar' je nova funkcia pre jeden znak
printf("!RSET\r");                // Reset vymaze okno
 
printf("!TITL Lahky Priklad\r");  // Nazov okna
 
printf("!SPAN -5, 45\r");        // Rozpatie pre analogove veliciny
 
printf("!PNTS 125\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
 
  
/* Cyklus v ktorom si kreslime dve analogove veliciny: i a 2i po 50 ms */
+
int main(void)
 +
{
 +
unsigned char c;
 +
float x=0.0;
 +
inituart();                   // Inicializacia seriovej linky
 +
stdout = &mystdout;              // Odteraz funguje printf();
  
for (j=1;j<4;j++)
+
printf("!RSET\r");                // Reset vymaze okno
  for (i=1;i<30;i++)
+
printf("!TITL Lahky Priklad\r");  // Nazov okna
   {
+
printf("!SPAN -5, 45\r");        // Rozpatie pre analogove veliciny
    printf("%d,%d\r",i,2*i);
+
printf("!PNTS 1250\r");          // Pocet bodov ktore kreslime
     _delay_ms(50);  
+
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;
printf("Koniec cyklu - hotovo!\n");
 
 
 
 
} /* End Of Main */
 
} /* End Of Main */
 
</source>
 
</source>
Riadok 51: Riadok 63:
  
  
[[CADRS Cvičenie 11|Návrat na cvičenie 11...]]
 
  
 
[[Category: AVR]][[Category: CAD_RS]]
 
[[Category: AVR]][[Category: CAD_RS]]

Aktuálna revízia z 20:23, 11. november 2011

#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 */