1 | #include <avr/io.h> //allg. Headerdatei zum Einbinden von Registern
|
2 | #include <stdint.h> //Definition einiger ganzzahliger Datentypen sinnvoll,
|
3 | //an denen eindeutig die Bit-Länge abgelesen werden kann
|
4 |
|
5 | #define FOSC 1843200 //gehört zur USART ansteuerung
|
6 | #define BAUD 9600
|
7 | #define MYUBRR FOSC/16/BAUD-1
|
8 | #include <stdlib.h>
|
9 | #define PI 3.141592654; //konstante "Variable" definieren
|
10 |
|
11 | uint8_t EINGELESENEBITS; //Variable EIN... ist 8-Bit Integer ohne Vorzeichen
|
12 | int16_t zaehle;
|
13 |
|
14 | void USART_Init( unsigned int ubrr);
|
15 | void uart_puts (char *s);
|
16 | void uart_putc(unsigned char c) ;
|
17 |
|
18 | uint16_t getADCvalue(void);
|
19 | uint16_t result = 0;
|
20 |
|
21 | void setDACvalue(uint16_t);
|
22 |
|
23 |
|
24 |
|
25 | int main (void)
|
26 | {
|
27 | ////////////////////////*Leuchtdiode IO schalten*/////////////////////////////
|
28 | //DDRC = 0xff; //Datenrichtungsregister setzen (1=Ausgang,0=Eingang), (dann ist PORTC von anfang an auf 1)
|
29 | DDRC |= (1<<DDC5); //PC5 als Ausgang schalten, standardmässig ist dann
|
30 | //PC5 in PORTC auf 0 (also LED an!!!)
|
31 | //PORTC = 0b00000000;
|
32 | //PORTC = 0x40; //Daten ausgeben (1=Strom auf Pin, 0= kein Strom auf Pin)
|
33 | //PORTC = 0x40; //Hex-Schreibweise
|
34 | //PORTC = 0b01000000; //binär-Schreibweise
|
35 | //PORTC |= (1<<PC6); //Einzel-Bitmanipulation
|
36 | //PORTC &= ~(1<<PC5); //LED einschalten
|
37 | //PORTC |= (1<<PC5); //LED ausschalten
|
38 |
|
39 |
|
40 | DDRD = 0x00;
|
41 | DDRB = (1<<PB1); //PB1 = OC1A als Ausgan
|
42 | setDACvalue(0x384);
|
43 | }
|
44 |
|
45 |
|
46 | while(1)
|
47 | {
|
48 | //leere schleife
|
49 | }
|
50 | //wird nie erreicht
|
51 |
|
52 | return 0; //Funktion beenden, Rückgabewert 0 ausgeben
|
53 | }
|
54 |
|
55 |
|
56 |
|
57 | //=====================================
|
58 | //====== DAC (PWM) Spannung ausgeben ==
|
59 | //=====================================
|
60 | void setDACvalue(uint16_t value)
|
61 | {
|
62 | TCCR1A = (1<<WGM12)|(1<<WGM11)|(1<<WGM10); //Fast PWM 10-Bit (Obergrenze 1023, Frequenz fTC1/1024)
|
63 | TCCR1A |= (1<<COM1A1); //nicht Invertierende PWM: löschen beim raufzählen, setzen beim runterzählen
|
64 | //TCCR1A = (1<<COM1A1)|(1<<COM1A0); //Invertierende PWM
|
65 | TCCR1B = (1<<CS10); //no prescaling
|
66 |
|
67 | //Compare Wert definiert Pulslänge
|
68 | //OCR1A = 0x0;
|
69 | //OCR1A = 0xa; //stark dez 10
|
70 | //OCR1A = 0x64; //dez 100
|
71 | OCR1A = 0x384; //leuchtet weniger stark dez 900
|
72 |
|
73 | OCR1A = value;
|
74 | }
|