Forum: Mikrocontroller und Digitale Elektronik Attiny13 Software SPI MAX7221


von Jan (Gast)


Angehängte Dateien:

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

von ... (Gast)


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.

von Jan H. (jan_h53)


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 =)

von ... (Gast)


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.

von Jan H. (jan_h53)


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

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.