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!
ich sehe da auf deiner Platine eine offfene Drahtbrücke... daran könnte es gelegen haben. Außerdem ist deine Spannungsversorgung instabil, da ist ein ripple von 280 mV drauf.
bevor wieder jemand anfängt zu flamen: gibt bitte eine genaue beschreibung deines Fehlers! Poste den Code für die Initialisierung des Oszillators!
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..
Bernd schrieb: > Nur funktioniert das nicht wie gewollt. Woher sollen wir denn wissen, was Du willst? Geh zum Gedankenleser in den Zirkus.
Wuerdest du dein Gehirn einschalten, haettest du den Zusammenhang zwischen Frage und Gewolltem erkannt GRINS
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!
Meine Glaskugel sagt, dass clkdiv/8 aktiv war und die led 8x zu langsam blinkten. Flip
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..
Bernd schrieb: > 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. Das riecht aber nach einem HW-Problem. Dann solltest Du Schaltplan, Aufbau, Stromversorgung ... zeigen. Gruß Dietrich
Bernd schrieb: > Hier der Schaltplan, sind aber keine Werte notiert. > > lg 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
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.
Bernd schrieb: > for (int i= 0; i<1;i++) Hä? Hast du dir mal überlegt, wie oft diese Schleife durchlaufen wird? Fuse den AVR mal auf 'Int RC Osc.' und lange Startup Zeit (meistens 64ms). Alsdann löschst du die CKDIV8 Fuse und änderst das Statement Bernd schrieb: > #define F_CPU 6000000UL auf 8000000UL.
:
Bearbeitet durch User
opamp schrieb: > Der zweite TLC ist das Problem. Nun muß ich schon wieder zum Gedankenleser gehen, welcher TLCxxx das sein soll. Ein TLC5940 wohl nicht. Man kanns mit dem Informationsgeiz aber auch übertreiben.
Matthias Sch. schrieb: > Hä? Hast du dir mal überlegt, wie oft diese Schleife durchlaufen wird? Habe den Wert oefter variiert, jetzt gerade braeuchte man auch keine :)..
Heinrich schrieb: > Was ist am 2. TLC bitte anders als bei den anderen in seinem Schaltplan? Die anderen stehen an 1., 3. und 4. Stelle. Wenn das kein Unterschied ist!?
Bernd schrieb: > Matthias Sch. schrieb: >> Hä? Hast du dir mal überlegt, wie oft diese Schleife durchlaufen wird? > > Habe den Wert oefter variiert, jetzt gerade braeuchte man auch keine > :).. Ok, das wird mir hier zu blöd - schönes Leben noch.
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.
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.
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.
opamp schrieb: > Das ist aber schön, dass du so viel Ahnung hast und wir alle dumme > Idioten sind. Das habe ich nicht gesagt... ;) Man lernt immer dazu, beim naechsten mal gibts alles auf einmal...
Bernd schrieb: > lag daran das ich den Programmer drinnen gelassen habe, Welchen? > nehme ich den raus geht es immer mit dem externen Takt. Das würde mir zu dneken geben... Denn die Frage bleibt: Warum?
Lothar Miller schrieb: > Das würde mir zu dneken geben... Atmel AVR ISPmk|| ist der Programmer... Ja ich frage mich so vieles. Mit dem internen Takt gehts nicht, mit nem Quarz gehts nicht, nur wenn ich einen externen Generator anschliesse geht es, dann aber auch nur wenn ich vorher den Programmer wieder rausziehe..
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...
:
Bearbeitet durch Moderator
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.