Forum: Mikrocontroller und Digitale Elektronik [AVR] Mode2+3 SPI und aktuelle AVRs


von Blubber1 (Gast)


Lesenswert?

Guten Abend,

beim ATTiny84 hab ich festgestellt, dass das ehemalige SPI-Interface zur 
USI umgebaut wurde. Dummerweise kann man die Clock-Polarität jetzt nicht 
mehr ändern, weshalb Mode2+3 weg fallen.

Die Frage die sich mir jetzt stellt: Muss man extern den Clock 
invertieren für Mode2+3-Peripherie wie die 128x64 COG-Displays?

Clock per Software stelle ich mehr unangenehm ineffizient vor ...

Viele Grüße
Blubber1

von Blubber1 (Gast)


Lesenswert?

Eine Frage, die für die geballte Fachkompetenz des Forums zu schwierig 
ist? xD

von c-hater (Gast)


Lesenswert?

Blubber1 schrieb:

> beim ATTiny84 hab ich festgestellt, dass das ehemalige SPI-Interface zur
> USI umgebaut wurde.

Das ist Bullshit, der dich als Mann ohne Überblick outet.

Bei den ollen Tinys gab es noch nie ein Hardware-SPI, sondern immer nur 
USI. Wenn es denn überhaupt irgendeine Hardwareunterstützung für 
seriellen Zauber gab, etliche Devices haben nichtmal das USI...

Bei einigen wenigen neueren Tinys ist das allerdings anders. Z.B. ATtiny 
441/841. Die haben nicht nur das klassische Hardware-SPI, was du (wohl 
von den ATmegas) kennst, sondern auch SPI-Master-fähige USARTs, wie es 
sie ebenfalls bei den (neueren) ATmegas gibt. Damit kann man schon was 
anfangen...

> Dummerweise kann man die Clock-Polarität jetzt nicht
> mehr ändern, weshalb Mode2+3 weg fallen.

Du hast das USI und seine Möglichkeiten ganz offensichtlich nicht 
wirklich verstanden. Lies' am besten nochmal das Datenblatt!

von Pappnase (Gast)


Lesenswert?

Besorge Dir mal die AppNote AVR319 und siehe es Dir an. Vielleicht 
klingelts dann.

mfg

von Johnny (Gast)


Lesenswert?

c-hater schrieb:
> Bei einigen wenigen neueren Tinys ist das allerdings anders. Z.B. ATtiny
> 441/841. Die haben nicht nur das klassische Hardware-SPI, was du (wohl
> von den ATmegas) kennst, sondern auch SPI-Master-fähige USARTs, wie es
> sie ebenfalls bei den (neueren) ATmegas gibt. Damit kann man schon was
> anfangen...


Naja, sicherlich kann man darüber streiten, was "neuer" heißt, aber ich 
denke, die Mehrheit würde z.B. einen 10 Jahre alten ATmega644P nicht als 
neuer bezeichnen, auch wenn er neuer als ein ATmega8515 ist...

von Blubber1 (Gast)


Lesenswert?

c-hater schrieb:
>> Dummerweise kann man die Clock-Polarität jetzt nicht
>> mehr ändern, weshalb Mode2+3 weg fallen.
>
> Du hast das USI und seine Möglichkeiten ganz offensichtlich nicht
> wirklich verstanden. Lies' am besten nochmal das Datenblatt!

Hab ich ... Es gibt keinen Bit, das äquivalent zu CPOL ist, wie es die 
AVRs mit SPI-Peripherie hatten ...

Über Erleuchtung würde ich mich freuen :)

von Blubber1 (Gast)


Lesenswert?

Pappnase schrieb:
> AVR319

Das war ein kurzes Lesevergnügen ... Seite 1: "Supports SPI Mode 0 and 
1"

von Blubber1 (Gast)


Lesenswert?

Aber zurück zur eigentlichen Frage ... Reicht es den Clock einfach 
extern zu invertieren, wenn ich z.B. ein LCD, das nur Mode2+3 kann, an 
den Tiny anschließen möchte?

von Pappnase (Gast)


Lesenswert?

Blubber1 wrote:
> Das war ein kurzes Lesevergnügen ... Seite 1: "Supports SPI Mode 0 and
> 1"

Vielleicht schaffst Du es ja irgendwann einmal bis Seite 5.
Die Datei avr319.zip enthält im Übrigen ein Codebeispiel.

von Blubber1 (Gast)


Lesenswert?

Pappnase schrieb:
> Vielleicht schaffst Du es ja irgendwann einmal bis Seite 5.
> Die Datei avr319.zip enthält im Übrigen ein Codebeispiel.

Hör bitte auf, meine Zeit damit zu verschwenden ... Auf Seite 5 stehen 
die SPI-Modes, die allgemein bekannt sind - mir auch.

Die USIs des Tinys HABEN KEIN CPOL BIT!

Von Seite 6:"The USI Three-wire mode is compliant with the Serial 
Peripheral Interface (SPI) Mode 0 and 1, "


Wenn du keine Ahnung hast, dann brauchst du auch nicht antworten ...

von Blubber1 (Gast)


Lesenswert?

Auch dein hochgelobtes Code-Beispiel unterstützt nur Mode 0 und 1:
1
/* Test application for the SPI-via-USI-driver. */
2
3
#include "spi_via_usi_driver.c"
4
5
6
7
#define SPIMODE 0  // Sample on leading _rising_ edge, setup on trailing _falling_ edge.
8
//#define SPIMODE 1  // Sample on leading _falling_ edge, setup on trailing _rising_ edge.
9
10
11
12
void main()
13
{
14
  unsigned char val = 0;    // Temp value to send.
15
  DDRB = 0xFF;      // Set PORTB to all output.
16
//  spiX_initmaster(SPIMODE);  // Init SPI driver as master.
17
  spiX_initslave(SPIMODE);  // Init SPI driver as slave.
18
  __enable_interrupt();    // Must do this to make driver work.
19
  do {
20
    spiX_put( val++ );  // Send temp value to SPI and increment,
21
    spiX_wait();    // wait for transmission to finish
22
    PORTB = spiX_get();  // and finally put result on PORTB.
23
  } while(1);      // Loop forever...
24
}

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.