Hallo, ich bin neu im Programmieren und wollte mir eine Waage bauen mittels einer Wägezelle und dem HX711. Ich programmiere mit dem ATMEGA16 und in ATMELSTUDIO. Ich habe bereits einen Code geschrieben, aber er funktioniert nicht ganz. Habe auch ein paar Warnings. Wäre sehr nett, wenn ihr kurz drüber schauen könntet. Beim HX711 handelt sich es um einen 24 Bit ADC. Es gebt mir hierbei nur um die Auswertung der 24 Bit. MSB First. Außerdem bin ich mir nicht sicher ob man den HX711 mit UART auswerten kann. Code:
1 | #include <avr/io.h> |
2 | #include "printf.h" |
3 | #include "LCD_4.h" |
4 | #include <util/delay.h> |
5 | #include <avr/interrupt.h> |
6 | |
7 | #define F_CPU 12000000
|
8 | #define BAUD 9600
|
9 | |
10 | unsigned long x=12345600, y,sum; |
11 | unsigned long werte[10]; |
12 | int j=0; |
13 | |
14 | void init() |
15 | {
|
16 | int baudrate=(unsigned long)12000000/(BAUD-1)/16; |
17 | // Baudrate einstellen -> 9600
|
18 | UBRRH = (baudrate) | (1<<URSEL); |
19 | //URSEL=0
|
20 | UBRRL = baudrate; |
21 | |
22 | // UART-RAhmen konfigurieren
|
23 | // UCSRA=
|
24 | UCSRB= (1<<TXEN); |
25 | //enable Receiver/Transmitter, RX Complete Interrupt Enable,
|
26 | |
27 | |
28 | |
29 | void clk() |
30 | {
|
31 | PORTB |=(1<<PD0); |
32 | PORTB &=~(1<<PD1); |
33 | }
|
34 | |
35 | void bitWrite(unsigned long *x, char n, char value) { |
36 | if (value) |
37 | *x |= (1 << n); |
38 | else
|
39 | *x &= ~(1 << n); |
40 | }
|
41 | |
42 | char bitRead(char *x, char n) { |
43 | return (*x & (1 << n)) ? 1 : 0; |
44 | }
|
45 | |
46 | |
47 | int main(void) |
48 | {
|
49 | |
50 | for (int j=0; j<10; j++) |
51 | {
|
52 | PORTD &=~(1<<PD1); // SCK auf LOW stellen |
53 | |
54 | werte[j]=y; |
55 | }
|
56 | |
57 | |
58 | for (j=0;j<10;j++) |
59 | {
|
60 | sum+=werte[j]; |
61 | }
|
62 | sum=sum/10; |
63 | |
64 | printf("%d",sum); |
65 | // printf("%X",sum);
|
66 | _delay_ms(2000); |
67 | }
|
68 | |
69 | ISR(USART_RXC_vect) |
70 | {
|
71 | for (int i=0; i<24; i++) // 24 BIT einlesen |
72 | {
|
73 | clk(); |
74 | bitWrite(x,0,PIND & (1<<PIND0)); // schreibt den Inhalt von RXD in das erste Bit von der hilfsvariable x |
75 | x=x<<1; |
76 | }
|
77 | clk(); |
78 | y=x; |
79 | x=0x12345600; // 12345678 ... Debug Wert |
80 | _delay_ms(200); // kann auch us sein bin mir nicht sicher |
81 | }
|