Hallo, wie kann ich am besten einen Datenübertragung zwischen einem Atmega 8 und einem Attiny 26 realisieren? Der Attiny 26 hat ja einen USI Interface mit dem man TWI oder SPI implementieren könnte. Wäre das die einfachste Lösung oder gibt es noch eine besser? Wichtig wäre mir das die onboard ISP Funktionalität für beide Controller erhalten bleibt. Gruß
Es geht eigentlich nur um die Übertragung von Messwerten vom Attiny26 zum Atmega8. Übertragung findet nur einseitig statt. Bin schon auf die Idee gekommen folgendermaßen 5 Pins zu verwenden: Am Attiny 4 Pins als Ausgang für die Übertragung und 1 Pin als Ausgang für die Ausgabe eines Taktes bzw. Synchronisationssignals. Am Atmega8 löst dann der vom Attiny26 ausgegebene Takt einen ext. Interrupt aus und es wird von den vier Datenausgängen ein halbes Byte eingelesen. Was haltet ihr von dieser Lösung?
Also ich würde TWI nehmen. Alles andere ist für so ein paar Bytes doch völlig überkandidelt. Obwohl SPI ist natürlich etwas einfacher für den Slave. TWI ist manchmal etwas frickelig beim AVR. Such dir was aus. Mit USI ist das schnell gemacht. Ist jedoch nur so "halb-hardware" da noch einiges in Software gemacht werden muss, was der Mega in Hardware macht. Steht aber ja alles im Datenblatt.
Meier schrieb: > Übertragung findet nur einseitig statt. SW-UART:
1 | #define F_CPU 8e6
|
2 | #define BAUD 9600
|
3 | #define STX_PORT PORTB
|
4 | #define STX_BIT 0
|
5 | |
6 | #include <util/delay.h> |
7 | #include <avr/io.h> |
8 | |
9 | void sputchar( uint8_t c ) |
10 | {
|
11 | c = ~c; |
12 | STX_PORT &= ~(1<<STX_BIT); // start bit |
13 | for( uint8_t i = 10; i; i-- ){ // 10 bits |
14 | _delay_us( 1e6 / BAUD ); // bit duration |
15 | if( c & 1 ) |
16 | STX_PORT &= ~(1<<STX_BIT); // data bit 0 |
17 | else
|
18 | STX_PORT |= 1<<STX_BIT; // data bit 1 or stop bit |
19 | c >>= 1; |
20 | }
|
21 | }
|
Peter
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.