Hey zusammen,
Ich habe ein Projekt vor mir, mit dem Thema Energy Harvesting.
Dabei soll ich werte eines Sensors am PC ausgeben.
aber meine vorgeschlagen Teile seihen zu verschwenderisch.
(kty81->atmega8l->max3232->PC).
Ich soll es mit einem ATtiny13V und SPI machen. Ich hoffe das, ich meine
ersten Hürden Überwältigung habe mit AD-wanlder und software SPI.
Und Die übertragung wollte ich dann mit einem MAX3100 machen der kann ja
SPI zu UART. Jetzt weiss ich nicht wie ich die configuration schreiben
soll im Code.
Habt Ihr tipps bzw. hat jemand sowas schon mal gemacht?
1 | #include<avr/io.h>
|
2 | #include<avr/interrupt.h>
|
3 | #include<util/delay.h>
|
4 |
|
5 |
|
6 | //#define F_CDU 4000000UL
|
7 | //DDRB
|
8 | #define SOFT_SPI_MOSI_DDR DDRB
|
9 | #define SOFT_SPI_CLK_DDR DDRB
|
10 | #define SOFT_SPI_MISO_DDR DDRB
|
11 | //PORTB
|
12 | #define SOFT_SPI_MOSI_PORT PORTB
|
13 | #define SOFT_SPI_CLK_PORT PORTB
|
14 |
|
15 | //PINB
|
16 | #define SOFT_SPI_MISO_PIN PB1
|
17 | //BIT
|
18 | #define SOFT_SPI_MOSI_BIT PB0
|
19 | #define SOFT_SPI_MISO_BIT PB1
|
20 | #define SOFT_SPI_CLK_BIT PB2
|
21 |
|
22 |
|
23 | void SOFT_SPI_init(void)
|
24 | {
|
25 | // MOSI und CLK auf Ausgang setzen
|
26 | SOFT_SPI_MOSI_DDR |=(1<<SOFT_SPI_MOSI_BIT);
|
27 | SOFT_SPI_CLK_DDR |=(1<<SOFT_SPI_CLK_BIT);
|
28 |
|
29 | // MOSI und CLK auf HIGH setzen
|
30 | SOFT_SPI_MOSI_PORT|=(1<<SOFT_SPI_MOSI_BIT);
|
31 | SOFT_SPI_CLK_PORT |=(1<<SOFT_SPI_CLK_BIT);
|
32 |
|
33 | // MISO auf Eingang setzen
|
34 | SOFT_SPI_MISO_DDR &=~(1<<SOFT_SPI_MISO_BIT);
|
35 | }
|
36 |
|
37 | void ADC_INIT(void)
|
38 | {
|
39 |
|
40 | ADCSRA = (1<<ADEN)|(1<<ADATE)|(1<<ADIE)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0); //PB5 AD-Channel
|
41 | ADCSRA |= (1<<ADSC);
|
42 | }
|
43 |
|
44 | unsigned char SOFT_SPI_WriteRead(unsigned char dataout)
|
45 | {
|
46 | uint8_t datain=0;
|
47 | //das Byte wird Bitweise nacheinander Gesendet MSB zuerst
|
48 | for (uint8_t a=8; a>0; a--){
|
49 | datain<<=1; //Schieben um das Richtige Bit zusetzen
|
50 | SOFT_SPI_CLK_PORT &=~(1<<SOFT_SPI_CLK_BIT); // Clock auf LOW
|
51 |
|
52 | if (dataout & 0x80){ //Ist Bit a in Byte gesetzt
|
53 | SOFT_SPI_MOSI_PORT |=(1<<SOFT_SPI_MOSI_BIT); //Set Output High
|
54 | }
|
55 | else{
|
56 | SOFT_SPI_MOSI_PORT &=~(1<<SOFT_SPI_MOSI_BIT); //Set Output Low
|
57 | }
|
58 | _delay_us(1);
|
59 | if (SOFT_SPI_MISO_PIN & (1<<SOFT_SPI_MISO_BIT)) //Lesen des Pegels
|
60 | {
|
61 | datain |= 1;
|
62 | }
|
63 |
|
64 | _delay_us(1);
|
65 | SOFT_SPI_CLK_PORT |=(1<<SOFT_SPI_CLK_BIT); // Clock auf High
|
66 | _delay_us(2);
|
67 | dataout<<=1; //Schiebe um nächstes Bit zusenden
|
68 | }
|
69 |
|
70 | return datain;
|
71 | }
|
72 |
|
73 |
|
74 |
|
75 | int main(void)
|
76 | {
|
77 | ADC_INIT();
|
78 | SOFT_SPI_init();
|
79 | SOFT_SPI_WriteRead(ADCW);
|
80 |
|
81 |
|
82 | while(1)
|
83 | {
|
84 |
|
85 | }
|
86 | return 0;
|
87 |
|
88 | }
|
Ich wollte das Projekt später erweitern mit dem RFM12B, hat der tiny13
genug speicher oder wirds da eng?
ich danke euch schon mal im voraus
MfG
Lucky