Attiny13 Software SPI MAX7221

Gast #2367046
Lesenswert?
• ▲
▼
Hallo liebe Gemeinde,
nach langem suchen probieren und tüfteln wende ich mich nun an euch :)

Ich möchte mit dem Attiny13 einen Motor mit PWm steuern und dazu noch 
einige LEDs ansteuern.

Die PWM hab ich jetzt nach einigem probieren hinbekommen, nur mit den 
LEDs hab ich noch meine Probleme.

Ich habe einen MAX7221 oder wahlweise MAX7219 und möchte die LEDs damit 
zum leuchten/blinken bringen. Da der Attiny13 über keine HW SPI verfügt 
habe ich mich also auf die Suche nach SW SPI Lösungen gemacht, nur 
leider bisher ohne nennenswerten Erfolg.
Zur Zeit nutze ich die serpa.h und serpa.c von folgender Seite.
http://www.rn-wissen.de/index.php/Portexpander_am_AVR#Ohne_SPI-Hardware
Dabei sieht man am Anfang auch kurz ein CLK und CS Signal am Oskar aber 
ansonsten nichts.
1
void serpa_init (void)
2
{
3
    /* Verwendete Ports auf OUT */
4
    DDRB |= (1<<DDB2 )|(1<<DDB3)|(1<<DDB4);
5

6
  
7
    /* SCR und RCK auf definierten Level HIGH */
8
  PORTB |= (1<<PB2); 
9
  PORTB |= (1<<PB4);
10
   
11
  
12
}
1
void serpa_out (void)
2
{
3
    unsigned char anz = SERPA_SIZE;
4
    unsigned char* serp = serpa+SERPA_SIZE;
5

6
    do
7
    {
8
        unsigned char bits;
9
        unsigned char data = *--serp;
10

11
        /* 8 Bits pro Byte rausschieben */
12
        for (bits = 8; bits > 0; bits--)
13
        {
14
            PORTB &= ~(1<<PB3);
15
            if (data & 0x80)
16
            {
17
                PORTB |= (1<<PB3);
18
            }
19

20
            data <<= 1;
21
            /* Strobe an SCK schiebt Daten im Gaensemarsch */
22
            /* um 1 Position weiter durch alle Schieberegister */
23
            PORTB &= ~(1<<PB2);
24
            PORTB |= (1<<PB2);
25
        }
26
    }
27
    while (--anz > 0);
28

29
    /* Strobe an RCK bringt die Daten von den Schieberegistern in die Latches */
30
    PORTB &= ~(1<<PB4);
31
    PORTB |= (1<<PB4);
32
}

Kann mir jemand sagen ob die Koniguration soweit ok ist?
Wie funktioniert die Übergabe genau?
Momentan steht in meiner main fogendes
1
serpa[SERPA_SIZE]=0b01010101;
2
serpa_out();

ist der Funktionsaufruf so richtig oder in welcher Form werden die 
Segmente angesteuert?

Hoffe ihr könnt mir helfen.

Liebe Grüße
Jan
Angehängte Dateien:
Gast #2367201
Lesenswert?
• ▲
▼
Jan schrieb:
> nur mit den
> LEDs hab ich noch meine Probleme.

Schau dir doch noch mal das Datenblatt an wie die LEDs verschaltet 
werden beim MAX7219/21.

Außerdem muss der MAX erst eine Initialisierungs-Sequenz bekommen, in 
der die
SHUTDOWN REGISTER
MODE REGISTER
INTENSITY REGISTER
SCAN-LIMIT REGISTER
DISPLAY-TEST REGISTER
eingestellt werden.
#2367294
Lesenswert?
• ▲
▼
Alles klar hab die LEDs jetzt an den SEG A-G Ausgängen. Aber das die 
Kathoden gegen GND sind ist richtig oder? heißt ja auch common-cathode.

Die Initialisierung werd ich mir nochmal genau zu Gemüte führen. Aber 
wie bringe ich die SW SPI zum laufen?

D0 - D7 sind die Daten
D8 - D11 die Adressen
und D12 -D15 sind egal

4 Bits werden ja zu einem Byte zusammen gefasst richtig?

BSP.:
0xXC01  - Shutdownregister Normal Op.

das X kann beliebig gewählt werden

0x0C01 ?

1
serpa[SERPA_SIZE]=0x0C01;
2
serpa_out();

Sollte es dann so funktionieren?

Liebe Grüße
und Vielen Dank schonmal =)
Gast #2367436
Lesenswert?
• ▲
▼
Jan H. schrieb:
> Aber das die
> Kathoden gegen GND sind ist richtig oder? heißt ja auch common-cathode.

NEIN.

Die Anoden der LEDs kommen an die Segmentpins und die Kathoden an die 
Digitpins.
Ein 7219/21 macht aber nur Sinn, wenn du mehrere Sieben-Segment-Anzeigen 
oder eine 8x8 Matrix ansteuern willst.

Deine 8 Leuchtdioden solltest du anders ansteuern. Dafür ist ein 7219/21 
nicht gedacht.
#2367452
Lesenswert?
• ▲
▼
Ok dann werd ich das nochmal anpassen =) Ich danke dir.
Werde auch noch ein paar mehr LEDs hinzufügen. Momentan hab ich nur 
MAX7219/21 zur verfügung.
Hatte auch zuerst überlegt das ganze über einen einfachen MUX/Decoder? 
zu machen, hab nun aber doch nur den MAX da.

Könntest du mir bei dem Code nochmal auf die Sprünge helfen?

Grüße
Jan

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.