Schaltung geht, ziemlich genau 24H

#3103783
Lesenswert?

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
Angehängte Dateien:
Gast #3103798
Lesenswert?

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.
#3103800
Lesenswert?

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
Gast #3103806
Lesenswert?

Ä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
#3103808
Lesenswert?

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.
Gast #3103809
Lesenswert?

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.
Gast #3103868
Lesenswert?

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....
#3103900
Lesenswert?

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
Gast #3103920
Lesenswert?

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.
(Firma: Raich Gerätebau & Entwicklung) #3103925
Lesenswert?

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
#3103958
Lesenswert?

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

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