Forum: Mikrocontroller und Digitale Elektronik ATTINY24V 10PU und 74HC595


von Ronald G. (ronald_g)


Angehängte Dateien:

Lesenswert?

Hi,
ich bin neu in der Szene und baue jetzt seit einer Woche eine meiner LED 
Matrix. Der Aufbau ging recht schnell, doch leider klappt die 
Ansteuerung nicht. Ich suche jetzt schon seit 3 Tagen nach möglichen 
Ursachen kann aber nirgendwo etwas finden, was ich falsch gemacht haben 
könnte. Den Aufbau meiner Schaltung habe ich abgehangen. Das Programm 
sieht wie folgt aus:
1
#define DATA_OUT PB0 // SI
2
#define SHIFT_DATA PB1 // SCK
3
#define SET_DATA PB2 // RCK + G
4
5
int main()
6
{
7
  DDRB = (1 << DATA_OUT) | (1 << SET_DATA) | (1 << SHIFT_DATA);
8
9
  PORTB = 0;
10
  for (int i = 0; i < 8; ++i) {
11
    // setze 0
12
    PORTB &= ~(1 << DATA_OUT);
13
    // shift
14
    PORTB |= (1 << SHIFT_DATA);
15
    PORTB &= ~(1 << SHIFT_DATA);
16
  }
17
  for (int i = 0; i < 16; ++i) {
18
    // setze 1
19
    PORTB |= (1 << DATA_OUT);
20
    // shift
21
    PORTB |= (1 << SHIFT_DATA);
22
    PORTB &= (~1 << SHIFT_DATA);
23
  }
24
  // kopiere shift register ins storage register and activiere output
25
  PORTB |= (1 << SET_DATA);
26
  PORTB &= ~(1 << SET_DATA);
27
  
28
  while(1){}
29
30
  return 0;
31
}

Der Tiny läuft mit 8MHz, ist das eventuell zu schnell für den 74HC595?
Zum Programieren nutze ich einen USB-ISP Adapter von ebay(~16€) manchmal 
kann ich nur mit 5v flashen da sonst beim Vergleichen die Daten 
unterschiedlich sind.

Danke
Ronald

von Peter D. (peda)


Lesenswert?

Die Schaltung ist falsch. In die Digits gehören Treibertransistoren und 
nach den Segmenttreiber Stromeinstellwiderstände.


Zum Multiplex:
Du brauchst einen Timerinterrupt, sonst wird das nix.
Und schreib Dir ne Ausgabefunktion, die ein Byte rausschiebt und 
verwende diese.


Peter

von Ronald G. (ronald_g)


Lesenswert?

Ok da baue ich dann noch Transistoren mit ein. Ich hatte früher aber mal 
eine ähnliche Schaltung am LPT wo die LEDs auch direct am Register 
hingen.
Eine Funktion zum rausschieben habe ich auch, aber ich wollte zum Test 
erstmal alle einschalten um zu schauen ob es überhaupt geht.

Grüße
Ronald

von Tom M. (tomm) Benutzerseite


Lesenswert?

Siehe LED-Matrix und Porterweiterungen, auch 
AVR-Tutorial: Timer könnte nützlich sein. :)

Und nein, 74HC* läuft problemlos mit mehreren dutzend Mhz. Das 
Datenblatt zu deinem Chip verrät dir, für welche Tempi eine saubere 
Funktion garantiert ist. Für's erste würd ich dir mal empfehlen, 
erprobte functions in dein Programm einzubauen; du kannst dann immer 
noch feintuning machen (Speed/Size).

Viel Spass!

von Ronald G. (ronald_g)


Lesenswert?

ich habe jetzt die Schaltung umgebaut und Transistoren eingebaut sieht 
in etwas jetzt so aus:
http://www.mikrocontroller.net/wikifiles/6/64/LED_Matrix_8x5.png


doch leider habe ich die Vermutung, das mein Chip kaputt ist wenn ich 
die beiden folgenden Programme ausführen lasse bekomme ich an PA0 
0,06Volt statt 0 und 3.
1
int main()
2
{
3
   DDRA = (1 << PA0);
4
   PORTA = (1 << PA0);
5
   while(true) {}
6
   
7
   return 0;
8
}
1
int main()
2
{
3
   DDRA = 0;
4
   PORTA = 0;
5
   while(true) {}
6
   
7
   return 0;
8
}
laut AVR Studio gibt es beim Flaschen keine Fehler. kann ich den Chip 
irgendwie testen oder auf Werkszustand zurück setzen(außer dem Erase 
Button)? Ich habe noch einen neuen ATTiny13 da und werde den mal 
einbauen und testen.
Grüße
Ronald

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.