Forum: Mikrocontroller und Digitale Elektronik Atmega 8 und Attiny 26 verbinden


von Meier (Gast)


Lesenswert?

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ß

von Meier (Gast)


Lesenswert?

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?

von Timmo H. (masterfx)


Lesenswert?

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.

von Peter D. (peda)


Lesenswert?

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
Noch kein Account? Hier anmelden.