Hallo liebe Forengemeinde, mein Projekt, (einen BV-32 Standfuss mit Pioneer FB zu bedienen) funktioniert mittlerweile ziemlich gut, ich habe nur ein großes Problem. Die Schaltung funktioniert nur 24h ^^ Die äussert sich indem sich der Fuss anfangs schnell drehen lässt, dies wird dann im Laufe der Zeit immer Langsamer, bis schliesslich keine Bewegung mehr stattfindet. Das ganze verwirrt mich stark, da nach ca 5 Stunden abstecken alles wieder einwandfrei funktioniert. Die Schaltung an sich funktioniert Messtechnisch aber die ganze Zeit über. Wiss ihr woran es liegen könnte?? VG Daniel
AVCC + AGND + AREF Anschließen VCC --+---+------ AVCC | | | | +--- AREF = = = | | | GND --+---+--+--- AGND Alle Cs 100nF Jeweil dicht wie möglich an den PINs des IC zwischen VCC und GND, AVCC und AGND, AREF und AGND. Noch nen Elektrolyt zwischen VCC und GND ca. 10-100µF.
Tschuldige Dumm von mir ;-)
1 | /*
|
2 | * IRBOSTAND.c
|
3 | *
|
4 | *Control B&O Stand with Pioneer TV Control
|
5 | * Created: 16.03.2013 08:42:19
|
6 | * Author: Daniel
|
7 | */
|
8 | |
9 | # define F_CPU 8000000UL
|
10 | #include <avr/io.h> |
11 | #include <irmp.h> |
12 | #include <avr/eeprom.h> |
13 | #include <stdint.h> |
14 | /*---------------------------------------------------------------------------------------------------------------------------------------------------
|
15 | * ATMEL AVR part:
|
16 | *---------------------------------------------------------------------------------------------------------------------------------------------------
|
17 | */
|
18 | #if defined (ATMEL_AVR)
|
19 | |
20 | void
|
21 | timer1_init (void) |
22 | {
|
23 | #if defined (__AVR_ATtiny45__) || defined (__AVR_ATtiny85__) // ATtiny45 / ATtiny85:
|
24 | |
25 | #if F_CPU >= 16000000L
|
26 | OCR1C = (F_CPU / F_INTERRUPTS / 8) - 1; // compare value: 1/15000 of CPU frequency, presc = 8 |
27 | TCCR1 = (1 << CTC1) | (1 << CS12); // switch CTC Mode on, set prescaler to 8 |
28 | #else
|
29 | OCR1C = (F_CPU / F_INTERRUPTS / 4) - 1; // compare value: 1/15000 of CPU frequency, presc = 4 |
30 | TCCR1 = (1 << CTC1) | (1 << CS11) | (1 << CS10); // switch CTC Mode on, set prescaler to 4 |
31 | #endif
|
32 | |
33 | #else // ATmegaXX:
|
34 | OCR1A = (F_CPU / F_INTERRUPTS) - 1; // compare value: 1/15000 of CPU frequency |
35 | TCCR1B = (1 << WGM12) | (1 << CS10); // switch CTC Mode on, set prescaler to 1 |
36 | #endif
|
37 | |
38 | #ifdef TIMSK1
|
39 | TIMSK1 = 1 << OCIE1A; // OCIE1A: Interrupt by timer compare |
40 | #else
|
41 | TIMSK = 1 << OCIE1A; // OCIE1A: Interrupt by timer compare |
42 | #endif
|
43 | }
|
44 | |
45 | #ifdef TIM1_COMPA_vect // ATtiny84
|
46 | #define COMPA_VECT TIM1_COMPA_vect
|
47 | #else
|
48 | #define COMPA_VECT TIMER1_COMPA_vect // ATmega
|
49 | #endif
|
50 | |
51 | ISR(COMPA_VECT) // Timer1 output compare A interrupt service routine, called every 1/15000 sec |
52 | {
|
53 | (void) irmp_ISR(); // call irmp ISR |
54 | // call other timer interrupt routines...
|
55 | }
|
56 | |
57 | int
|
58 | main (void) |
59 | {
|
60 | IRMP_DATA irmp_data; |
61 | uint16_t x; |
62 | DDRB = 0xFF; |
63 | DDRD = 0x00; |
64 | //PORTD |= (1<<PD1) | (1<<PD2); /* Pins PD1 und PD2 "high" */
|
65 | PORTD &= ~( (1<<PD1) | (1<<PD2) ); |
66 | //PORTD=0xFF;
|
67 | irmp_init(); // initialize irmp |
68 | timer1_init(); // initialize timer1 |
69 | sei (); // enable interrupts |
70 | x=0; |
71 | for (;;) |
72 | {
|
73 | if (irmp_get_data (&irmp_data)) |
74 | {
|
75 | if (irmp_data.command == 0x001E){ |
76 | if (irmp_data.flags & IRMP_FLAG_REPETITION) |
77 | {
|
78 | |
79 | }
|
80 | else
|
81 | {
|
82 | if(x==1){ |
83 | PORTD &= ~(1<<PD0); |
84 | x=0; |
85 | }else{ |
86 | PORTD |= (1<<PD0); |
87 | x=1; |
88 | }
|
89 | }
|
90 | /* eeprom_write_block(&irmp_data.command, (void *) 0x02,sizeof(&irmp_data.command));
|
91 | eeprom_write_block(&irmp_data.address, (void *) 0x05,sizeof(&irmp_data.address));
|
92 | eeprom_write_block(&irmp_data.protocol, (void *) 0x10,sizeof(&irmp_data.protocol));*/
|
93 | /* PORTD=0xFF;
|
94 | x==1;*/
|
95 | }
|
96 | if (irmp_data.command == 0x0024 && x==1){ |
97 | if (irmp_data.flags & IRMP_FLAG_REPETITION) |
98 | {
|
99 | PORTD |= (1<<PD3); |
100 | PORTD |= (1<<PD1); |
101 | _delay_ms(100); |
102 | }
|
103 | else
|
104 | { } |
105 | PORTD &= ~(1<<PD3); |
106 | PORTD &= ~(1<<PD1); |
107 | }
|
108 | if (irmp_data.command == 0x0025 && x==1){ |
109 | if (irmp_data.flags & IRMP_FLAG_REPETITION) |
110 | {
|
111 | PORTD |= (1<<PD3); |
112 | PORTD |= (1<<PD2); |
113 | _delay_ms(100); |
114 | }
|
115 | else
|
116 | { } |
117 | PORTD &= ~(1<<PD3); |
118 | PORTD &= ~(1<<PD2); |
119 | }
|
120 | |
121 | |
122 | |
123 | |
124 | |
125 | |
126 | |
127 | |
128 | }
|
129 | }
|
130 | }
|
131 | |
132 | |
133 | #endif
|
Brauch ich AREF AGND und AVCC überhaupt??, da der ADC eig nicht in Verwendung ist.
Ähm bin ich blind oder ist da kein Quellcode?? An der Schaltung kann man eigentlich sogut wie nichts falsch machen, ist ja nicht komplex. Der Fehler liegt also im Quellcode. Wie die anderen zwei auf 42 kommen ist mir unklar.. Lad mal deinen Code hoch oder send ihn mir per mail abcbyxvzf [ät] gmail [dot]com evtl. kann ich dir ja Helfen
Uwe schrieb: > Keen Bock wa ? Nach dem 5-tausendsten mal * es werden immer alle Vcc/GND Pins angeschlossen, selbst wenn sie AVcc bzw. AGnd heißen * an alle Vcc/GND Pärchen kommt ein 100nF Kondensator * ein Pullup Widerstand am Reset schadet nicht * nein, AREF wird normalerweise nicht mit Vcc verbunden, sondern einfach nur 100nF nach GND (ok, trifft hier nicht zu) verlässt dich auch irgendwann der Enthusiasmus. Vor allen Dingen wenn es buchstäblich jedesmal das immer gleiche ist und pro Woche mindestens 10 mal bei diversen Bitten zur Kontrolle von Schaltungen vorkommt.
xvzf schrieb: > Ähm bin ich blind oder ist da kein Quellcode?? > > An der Schaltung kann man eigentlich sogut wie nichts falsch machen, ist > ja nicht komplex. > Der Fehler liegt also im Quellcode. Wie die anderen zwei auf 42 kommen > ist mir unklar.. > Lad mal deinen Code hoch oder send ihn mir per mail abcbyxvzf [ät] gmail > [dot]com > > evtl. kann ich dir ja Helfen Sorry, PC hat nicht die ganze Seite angezeigt.
So alle angeschlossen, trotzdem geht nix :/ Der Prozessor reagiert ja auch immer richtig, d.h. die LED lässt sich immer schalten (dient dazu um "Drehmodus" zu aktivieren) und auch die jeweiligen Pins schliesst er brav auf Masse (da wo sie hingehören). Ich glaub fast es liegt an dem Fuss ;-)
Warum ist im Schaltplan ein mega8 und im Code ein tiny45/85? Vieleicht gibt es dort Probleme bei den Timern (von C versteh ich nur Bahnhof) wäre dass, was mir so auffällt.
Guck Dir mal die GND Verbindung an. Die LED kann so auch nicht leuchten, oder die Bezeichnungen oben sind falsch. guude ts
Eindeutig, der Fehler liegt am fehlenden Source in den folgenden Zeilen:
1 | } |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | } |
Evtl. kommt der Compiler auch nicht mit deiner Formatierung klar, das kann ja nichtmal ein Mensch lesen....
> So alle angeschlossen, trotzdem geht nix
Auch alle Kondensatoren ???
Woher weißt du das ? Ich dachte der "Fehler" tritt nur alle 24h auf !
So ein kleiner Zwischenbericht, AREF AVCC und AGND angeschlossen, Kondensatoren eingebaut, Schaltung gestarten, Fuss dreht sich nicht. Fuss an Labornetzteil mit 14 V und "manuellen" Steuerbefehlen-> Fuss dreht sich. Kompiler und Sourcefehler schliesse ich eig. aus, da der Atmel beide Transistoren problemlos durchschaltet und die Spannungen an der Buchse für den Fuss i.o. sind. Die Led oben ist falsch eingezeichnet :-) Der Fuss braucht zu drehen GND an 1 +14V an 5 und dann je nachdem ob links oder rechstdrehend 3 oder 4 auf GND
Freilaufdioden ??? Ähm der Schalplan ist schlecht ... schlechter am schlech.. Zudem ist GND und 5V vertauscht wasn dis fürn Motor , warum sind da drei Transistoren, wo sind die Halbbrücken ? Neuer Schaltplan bitte .. und info was dis fürn Motor ist.
Die Ansteuerung deiner Transitoren ist nicht gerade das wahre. Schon mal was von Basiswiderstand gehört? Ich schätze, dass dein Mega 8 recht heiss wird, und die Ausgänge nix mehr tun wollen. Mach da zumindest einen 1K Widerstand zwischen Basis und uC hinein. Grüsse
Uwe schrieb: > wasn dis fürn Motor , warum sind da drei > Transistoren, wo sind die Halbbrücken ? Gebhard Raich schrieb: > Mach da zumindest > einen 1K Widerstand zwischen Basis und uC hinein. Die beiden brachten des Rätsels Lösung ;-) Dem Motor parallel geschaltet ist ein Kondensator ( Ich hab das arme ding jetzt wirklich zerlegt) der schlimme Finger hat mir immer meine GND die ich auf die Pins gab gekillt. Den Entlad ich jetzt mittels einer Freilaufdiode. Die Ausgänge hab ich jetzt mit 1 kOhm versehen, und momentan dreht er wieder. Mal schauen was der morgige Tag bringt ;-) Vielen Dank bis dahin schonmal ;-) Grüße Daniel
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.