Mikrocontroller kommt aus dem Takt ;D

Gast #4120803
Lesenswert?

Hallo,

habe folgendes Problem. Benutze einen Atmega168 um ein paar LEDs 
anzusteuern.
Nur funktioniert das nicht wie gewollt.
Ich wollte eigtl. den internen 8Mhz Taktgenerator verwenden.
Nach langem Fehlersuchen bin ich mit einem Taktfrequenzgenerator an die 
XATL1,2 Eingänge gegangen und habe einen externen Takt von jetzt 8Mhz 
angelegt.
Nachdem ich die Fuses eingestellt hatte - Siehe da es funktioniert.

Ich Frage mich jetzt wieso?  Wieso mit externem Takt aber nicht mit 
internen..?

Viele Gruesse und danke!
Gast #4120816
Lesenswert?

Drahtbruecken sind alle mit Durchgangspruefer gecheckt...
Stuetzkondensatoren sind verbaut, Spannung ist stabil.

Was soll ich genauer beschreiben?
Eingestellt wurde der Osz. ueber die Fuses AVR Studio... gibts kein 
Code..
Persönliche Seite #4120877
Lesenswert?

Bernd schrieb:
> Wuerdest du dein Gehirn einschalten, haettest du den Zusammenhang
> zwischen Frage und Gewolltem erkannt GRINS

Die Frage ist ja nicht wie du dein Quarz initialisierst, sondern was du 
von deinen LEDs erwartest?

Sollen sie im 1Hz Takt blinken? -> Woher soll das hier einer im Forum 
wissen?

Daher die Frage:
Wie sieht dein Code zu den LEDs aus -> Was erwartest du? -> Was bekommst 
du?
-> Was passiert mit dem internen Osz.? Was passiert beim einschalten des 
externen?

WAS FUNKTIONIERT NICHT ?!? Ohne eine Antwort auf diese Frage wird 
niemand dir helfen können weil niemand den Zusammenhang verstehen kann, 
da du keinen Zusammenhang bescheibst!

Alsbo bitte nicht so vorlaut!
Gast #4120894
Lesenswert?

Es ist ein kleiner LED Cube mit 4 Schieberegistern.
Die Ausgaenge der Schieberegister sind immer RGB einer LED dann die 
naechste LED...
1
 /****************************************************************/
2
/** INCLUDES **/
3
/****************************************************************/
4
#define F_CPU 6000000UL
5
#include <avr/io.h>
6
#include <util/delay.h>
7

8
/****************************************************************/
9
/** FUNKTIONS-HEADER **/
10
/****************************************************************/
11

12
/****************************************************************/
13
/** MAIN-FUNKTION **/
14
/****************************************************************/
15
#define SET_BIT(PORT, BITNUM)    ((PORT) |=  (1<<(BITNUM)))
16
#define CLEAR_BIT(PORT, BITNUM)  ((PORT) &= ~(1<<(BITNUM)))
17
#define TOOGLE_BIT(PORT, BITNUM) ((PORT) ^=  (1<<(BITNUM)))
18

19

20

21
int main(void)
22

23
{
24
/** Konfigurationen **/
25

26
DDRC = 0b00001111;
27
DDRB = 0b00000110;
28
DDRD = 0b00000010;
29

30
CLEAR_BIT(PORTB,2);  //Output Enable 
31
SET_BIT(PORTC,3);  //SDI
32

33
//Ebenen
34
CLEAR_BIT(PORTC,2);
35
CLEAR_BIT(PORTC,1);
36
CLEAR_BIT(PORTC,0);
37

38

39
/** Hauptschleife **/
40
  for(;;)
41
  {
42

43
  for (int i= 0; i<1;i++)
44
  {
45
          SET_BIT(PORTC,3);  //SDI
46
  
47

48
          CLEAR_BIT(PORTB,1);
49
          _delay_ms(1);
50
          SET_BIT(PORTB,1);
51
          _delay_ms(1);
52

53

54
          SET_BIT(PORTC,3);  //SDI
55

56

57
          CLEAR_BIT(PORTB,1);
58
          _delay_ms(1);
59
          SET_BIT(PORTB,1);
60
          _delay_ms(1);
61
          
62

63
          SET_BIT(PORTC,3);  //SDI
64

65
          CLEAR_BIT(PORTB,1);
66
          _delay_ms(1);
67
          SET_BIT(PORTB,1);
68
          _delay_ms(1);
69

70
        
71

72
  }
73

74
    _delay_ms(500);
75
          
76

77
  
78
  
79
  }
80

81
}

Das ist der Code. Jetzt wird jede halbe Sekunde eine weitere LED 
angemacht, in dem Fall in weiss.

Mit internem Takt funktioniert das ganze halt gar nicht und mit externem 
auch nur alle 2 von 5 versuchen. Dh wenn ich die Stromzufuhr trenne und 
wieder anschliesse funktioniert es auch nicht immer.

Ziel ist, jede LED einzeln ansteuern zu koennen..Farbe etc..
Mit dem Code natuerlich nicht, der schickt jetzt einfach nur einsen 
durch..
Gast #4120932
Lesenswert?

opamp schrieb:
> Der zweite TLC ist das Problem. Musst du noch korrekt dimensionieren.
> Außerdem solltest du sternförmige Netze benutzen. Dein Layout kann zu
> Einkoppelungen führen

Was ist am 2. TLC bitte anders als bei den anderen in seinem Schaltplan?
Bezüglich der Einkopplungen ist der sternförmige Aufbau nicht unbedingt 
nötig, nach seiner Software liegt die Taktfrequenz ja bei kleinen 
1000Hz.
#4120975
Lesenswert?

Bernd schrieb:
> Habe den Wert oefter variiert, jetzt gerade braeuchte man auch keine

Du hast keine Ahnung, wie man ein Schieberegister ansteuert und 
probierst ohne Sinn und Verstand irgendwelchen Unsinn aus.

Du hast 4 TLCs kaskadiert. Damit hast du 32 Ausgänge. Diese 32 Ausgänge 
musst du ansteuern, d.h. du musst 32 Bit ausgeben. Immer.
Mit welchem Takt das geschieht, spielt dabei überhaupt keine Rolle.

Das zuerst ausgegebene Bit landet am letzten Ausgang des vierten SRs.

Wenn diese 32 Bit ausgegeben sind, sind sie aber noch nicht an den 
Ausgängen des jeweiligen TLC. Die Bits müssen jetzt mit einem Impuls auf 
die Ausgänge geschaufelt werden. Dazu dient der LE-Eingang. Dieser 
Eingang ist weder in deiner Skizze zu finden, noch wird er im 
Progrämmchen angesteuert. Die Ausgänge der TLCs haben damit die Werte, 
die beim Einschalten zufällig vorhanden sind. Deswegen geht es manchmal 
und manchmal nicht. Tatsächlich geht es aber überhaupt nicht.

mfg.
Gast #4120989
Lesenswert?

Mir ist wohl bewusst wie so ein Schieberegister funktioniert.
Die Schleife ist lediglich dazu dagewesen das ich nicht nur einsen 
durchschicke, um zu gucken ob die Farben auch funktionieren...

Der LE ist ist die ganze Zeit auf 1, damit die Zustaende direkt auf den 
Ausgang 'pulsiert' werden.

Hat schon bei dem normalen LED Cube funktioniert.

Das es manchnmal ging und manchmal nicht, lag daran das ich den 
Programmer drinnen gelassen habe, nehme ich den raus geht es immer mit 
dem externen Takt.
Gast #4121014
Lesenswert?

Bernd schrieb:
> Mir ist wohl bewusst wie so ein Schieberegister funktioniert.

Das ist aber schön, dass du so viel Ahnung hast und wir alle dumme 
Idioten sind.

Übrigens ist es sehr schade, dass sich nicht jeder so klar ausdrücken 
kann wie du. Wir sollten diesen Post als Musterbeispiel verlinken, um zu 
zeigen, wie man ein Problem von Anfang an mit allen nötigen 
Informationen beschreibt, so dass es mit Hilfe aller schnell gelöst 
wird.
Moderator (Firma: Titel) Persönliche Seite #4121109
Lesenswert?

Bernd schrieb:
> bin ich mit einem Taktfrequenzgenerator an die XATL1,2 Eingänge
> gegangen
"Ksatl Eins Komma Zwei"? Seltsame Pins...

Bernd schrieb:
> nur wenn ich einen externen Generator anschliesse geht es
Welche Signalform mit welcher Amplitude und welcher Frequenz wo 
angeschlossen?

> aber auch nur wenn ich vorher den Programmer wieder rausziehe..
Ich würde mal den Reset kontrollieren...
Gast #4121157
Lesenswert?

Ich würde erstmal einfach nur eine direkt angeschlossene LED (mit 
Vorwiderstand) im Sekundentakt blinken lassen.

Die ganze andere Peripherie soll erstmal wurscht sein. So bekommst du 
heraus, ob du ein Problem mit dem Mikrocontroller und seinem Takt hast, 
oder  mit dem Rest der Schaltung.

Wie immer gilt die Grundregel: Zerlege komplexe Probleme in einfachere, 
bis sie so klein sind, dass du sie beherrschen kannst.

Im Extremfall könnte es darauf hinauslaufen, dass du die LED (mit 
Vorwiderstand) an die Stromversorgung anschließt, um zu sehen, ob die 
Stromversorgung überhaupt funktioniert.

Klingt blöd, aber so macht man das halt. Das Prinzip gilt im Großen wie 
im Kleinen und beschränkt sich nicht nur auf die Elektronik bzw 
Softwareentwicklung.

Deine Herangehensweise ist völlig falsch. Drehe hier an einer Schraube, 
Drücke da mal einen Knopf, biege dort etwas hin. Du hast keine Ahnung, 
was du da tust und warum du es tust. Du hoffst auf den zufälligen 
Erfolg. Mag sein, dass das ab und zu klappt, aber langfristig ist das 
keine Erfolgreiche Strategie.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren