Hallo,
ich habe eine kleine Regelung mit einem PID-Regler wie in AVR221
beschrieben aufgebaut. Der Istwert wird über den ADC 0 einglesen
Sollwert über ADC1, die Stellgröße wird über PWM gesteuert. Die Regelung
kann ich über RS232 starten, indem ich die Dezimalzahl 11 schicke.
Ich verwende eine ATmega1284.
Nun zum Problem:
Das ganze funktioniert ganz gut bei dem interen Takt von 1 MHz. Jetzt
will ich das ganze mit einem 20 MHz Quraz laufen lassen.
Sobald ich jetzt die Regelung über die RS232 starte, beginnt die
Regelung zu arbeiten, aber der Mikrocontroller startet jedes mal neu bei
der Initialisierung. Erkenntlich dadurch, das bei jeder Initiaisierung
über die RS232-Schnittstelle die Dezimalzahl 12 geschickt wird.
Hat jemand eine Idee warum das so ist.
Hier noch der Code:
1
#include<avr/io.h>
2
#include<avr/interrupt.h>
3
#include"pid.h"
4
#include<stdio.h>
5
#include<stdint.h>
6
7
#define F_CPU 20000000UL // Frequenz des AVR 20Mhz
8
#define BAUDRATE 19200UL // Festlegen der Baudrate für RS232 Übertragtung.
9
10
#define P_MATLAB -5
11
#define I_MATLAB 20
12
#define D_MATLAB 0.01
13
14
15
voidinit_USART(void);
16
voidsend_USART0(uint8_tdata);
17
voidinit_ADC(void);
18
voidinit_PWM(void);
19
voidinit_Port(void);
20
voidset_PWM(uint16_tsoll,uint16_tmax_wert);
21
voidinit_Timer(void);
22
voidinit_PID(void);
23
uint16_tread_ADC(uint8_tchannel);
24
25
volatileuint8_ti;
26
volatileuint16_tsoll;
27
28
//! Parameters für PID Regler
29
structPID_DATApidData;
30
31
32
intmain(void)
33
{
34
init_Port();
35
init_ADC();
36
init_USART();
37
init_PWM();
38
init_PID();
39
send_USART0(12);
40
41
42
43
sei();// Aktivieren der Interrupts
44
while(1)
45
{
46
47
//TODO:: Please write your application code
48
}
49
}
50
ISR(USART0_RX_vect)
51
{
52
uint8_tbuffer;
53
uint16_t;
54
buffer=UDR0;
55
if(buffer==11)
56
{
57
init_Timer();// Startet Regelung
58
}
59
send_USART0(buffer);
60
}
61
62
ISR(TIMER0_COMPA_vect)
63
// Timer0 Interruppt
64
{
65
uint16_tist;
66
uint16_tpwm_signal;
67
int16_tStellgr;
68
ist=read_ADC(0);// Istwert an ADC0 einlesen
69
soll=read_ADC(1);// SOllwert über AC1 einlesen
70
Stellgr=pid_Controller(soll,ist,&pidData);
71
if(Stellgr<0)
72
{
73
Stellgr=0;
74
}
75
pwm_signal=Stellgr;
76
set_PWM(pwm_signal,32768);
77
}
78
voidsend_USART0(uint8_tdata)
79
//Sendet Daten über den USART 0
80
{
81
while((UCSR0A&(1<<UDRE0))==0)
82
{}// Warten bis Senderegister leer ist
83
UDR0=data;// Daten in das Senderegister schieben
84
}
85
86
voidinit_USART(void)
87
// USART 0 wird initialisiert
88
{
89
UBRR0=(F_CPU/(16UL*BAUDRATE))-1;//Einstellen der Baudrate
90
UCSR0B|=(1<<RXCIE0)|(1<<RXEN0)|(1<<TXEN0);// Empfangsinterupt ein, Empfangen und Senden möglich
91
UCSR0C=0;// asynchroner Modus, keine Parity, 1 Stopbit
ADMUX=0;// Referenz Vacc mit 100nF an Aref, kein Gain
100
ADCSRA=(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0);// Register auf 0 setezen und nur den Prescaler auf 128 (156kHz bei 20Mhz)
101
//ADCSRA = (1<<ADPS1)|(1<<ADPS0);// Register auf 0 setezen und nur den Prescaler auf (8 125kHz bei 1Mhz)
102
ADCSRA|=(1<<ADEN);// ADC aktiviert
103
ADCSRA|=(1<<ADSC);// Starten konvertierung
104
while(ADCSRA&(1<<ADSC)){}// Warten bis Konvertierung fertig
105
result=ADC;// Dummy-Auslesen des ADC's
106
}
107
108
109
uint16_tread_ADC(uint8_tchannel)
110
// führt eine ADC-Wandlung an dem übergebenen Channel durch
111
// Falls der channel außerhalb des zulässigen Bereiches liegt wird der Wert 0xFF zurückgegeben.
112
{
113
uint16_tresult=0;
114
uint8_tn=0;
115
if(channel<8)
116
{
117
ADMUX=channel;
118
ADCSRA|=(1<<ADSC);// Starten konvertierung
119
while(n<3)
120
{while(ADCSRA&(1<<ADSC)){}// Warten bis Konvertierung fertig
121
result=result+ADC;
122
n=n+1;
123
}
124
result=result/3;
125
}
126
else
127
{
128
result=0xFF;
129
}
130
returnresult;
131
}
132
133
134
voidinit_PWM(void)
135
// Initialisiert PWM
136
// Timer 1 für PWM 16 bit
137
{
138
TCCR1A|=(1<<COM1A1);// nicht invertierende Modus OC1A
139
TCCR1A|=(1<<WGM11);
140
TCCR1B|=(1<<WGM12)|(1<<WGM13);//Fast PWM Mode, TOP ICR1-Register
141
TCCR1B|=(1<<CS10);//Prescaler 1
142
ICR1=499;// PWM-Frequenz 40KHz gitl bei 20 Mhz
143
//ICR1 = 50; //PWM-Frequenz 5 kHz bei 1 Mhz
144
OCR1A=0;// PWM auf 0
145
146
PORTC|=(1<<PORTC1);
147
}
148
149
voidinit_Port(void)
150
//Initialisiert die Ports
151
{
152
DDRD=0b11110000;// PD4-PD7 als Ausgang
153
}
154
155
voidset_PWM(uint16_tsoll,uint16_tmax_wert)
156
// Stellt den PWM ein, max_wert gibt den Maximalen Wert an, was soll erreichen kann
157
{
158
uint16_tmax_register;
159
uint32_tsoll_register;
160
max_register=ICR1;
161
//soll_register = (soll/(max_wert/max_register));
162
soll_register=soll/65;
163
OCR1A=soll_register;
164
}
165
166
voidinit_Timer(void)
167
// Initialisiert Timer für die Diskretisierung
168
{
169
TCCR0A|=(1<<WGM01);//CTC Modus
170
TCCR0B|=(1<<CS00);//Prescaler 1
171
OCR0A=199;// 50kHz bei 20 Mhz
172
//OCR0A = 199; //2,5 kHz bei 1 Mhz
173
TIMSK0|=(1<<OCIE0A);// Interrupt compare A ein
174
PORTB|=(1<<PINB0);// setz Pinb0 auf 1 wenn regelung aktiv ist.
175
}
176
177
voidinit_PID(void)
178
//Initalisiern PID_Regeler
179
{
180
int16_tKP,TI,TD;
181
KP=P_MATLAB*SCALING_FACTOR;
182
TI=P_MATLAB*SCALING_FACTOR*I_MATLAB;
183
TD=P_MATLAB*SCALING_FACTOR*D_MATLAB;
184
pid_Init(KP,TI,TD,&pidData);
185
}
Kurz Erklärung zum Code:
TimerO -> Ist für die gleichmäßige Abtastung während der PID-Regelung
verantwortlich
Timer1 -> Generiert das PWM Signal
Funktion pid_Controller -> berechnet die Stellgröße für des PID-Reglers.
Hab gleich eine Nachtrag.
Ich hatte als Referenzspannung bei der AD-Wandlung intern auf AVCC
zugegriffen. Wenn ich jetzt auf die exteren Refernzspannung AREF wechsel
und von AVCC nach AREF eine Brücke lege stecke und den Code ändere läuft
die Regelung auch bei 20MHz wie gewollt.
Scheint das Problem gelöst zu sein, aber warum??
Kann mir das nicht erklären, hat jemand eine Idee?
{while(ADCSRA&(1<<ADSC)){}// Warten bis Konvertierung
12
fertig
Im Interrupt 6 mal auf den AD-Wandler warten? Das ist eine schlechte
Idee...
Und dann noch das:
1
result=result/3;
Wenn das wenigsten 4 gewesen wären. Oder 2. Denk mal drüber nach, dass
ein uC binär in Zweierpotenzen toll und schnell arbeiten kann...
Tobi schrieb:> Hab gleich eine Nachtrag. ..... hat jemand eine Idee?
Wie sieht die Schaltung und das Layout aus?
Im UartRx interrupt den Timer aufzurufen und den UartTx auch gleich noch
kannst vergessen. So wird das nie was.
Das Zauberwort heisst Zustandsmaschine. Alles wird im Main abgehandelt,
in einem Interrupt fast nichts.
Tobi schrieb:> OCR0A = 199; // 50kHz bei 20 Mhz
Laut meiner Rechnung sind das 100kHz.
> // Register auf 0 setezen und nur den Prescaler auf 128 (156kHz bei> 20Mhz)
Der ADC benötigt für eine Wandlung 13 ADC-Clocks = 13 x 128 = 1664
µC-Clocks.
Zweimal wandeln dauert also mehr als 3328 µC-Clocks, den Rest-Code außer
acht gelassen.
Aufgerufen wird die OC0-ISR und damit die ADC-Wandlungen alle 200
µC-Clocks. Wie soll das gehen?
> Wenn ich jetzt auf die exteren Refernzspannung AREF wechsel> und von AVCC nach AREF eine Brücke lege stecke und den Code ändere läuft> die Regelung auch bei 20MHz wie gewollt.
Da kannst Du Drähte hinstecken wo Du willst, das funktioniert mit dem
gezeigten Code nicht wie's soll, denn das zeitbestimmende Element ist
tatsächliche die Durchlaufzeit der ISR und nicht die Aufrufrate der ISR.
Mal abgesehen vom Rest.
Jag den Compiler über dein Projekt drüber.
Danach scrollst du mal hoch und korrigierst ALLE Warnungen, die du vom
Compiler kriegst.
Und PS:
Eine derartige Warnung
1
C:\Projekte\AVR\M1284_PWM\M1284_PWM\M1284_PWM.c(60,1): 'USART0_RX_vect' appears to be a misspelled signal handler [enabled by default]
ist eine, die man nicht ignorieren darf.
Einige Warnungen kann man ignorieren. Manche allerdings nicht.
Blöd natürlich, wenn es in deinem Projekt einige Warnungen gibt und du
die nicht so wichtigen von den tatsächlich wichtigen nicht trennst. Mach
es dir zur Maxime: Ein Projekt muss komplett ohne Warnungen kompilieren.
Selbst wenn es eine tatsächlich harmlose Warnung ist, wird ihre Ursache
beseitigt.
>Tobi schrieb:>- OCR0A = 199; // 50kHz bei 20 Mhz>Laut meiner Rechnung sind das 100kHz.
Ich muss doch die Freqeunz über
berechnen, da komm ich auf 50 kHz.
>Aufgerufen wird die OC0-ISR und damit die ADC-Wandlungen alle 200>µC-Clocks. Wie soll das gehen?
Die Lösung ware es die Abtastfreqeunz nach unten zu schrauben??
Haltet ihr das für sinvoll den Messwert zu Mitteln oder soll ich mir das
sparen??
Tobi schrieb:>>Tobi schrieb:>>- OCR0A = 199; // 50kHz bei 20 Mhz>>>Laut meiner Rechnung sind das 100kHz.>> Ich muss doch die Freqeunz über
berechnen, da komm ich auf 50
> kHz.
Das mag schon sein, dass du das willst.
Aber bei 50kHz Interrupt Frequenz hat dein AVR gerade mal 20Mhz / 50Khz
oder gleich 400 Takte Zeit um all das abzuarbeiten, was in deiner
Timer-ISR vorkommt.
Und das geht sich nun mal nicht aus.
Wenn du zur Herstellung eines Werkstücks 5 Stunden brauchst, dann kann
sich dein Boss Kopf stellen und sich wünschen du würdest ihm 20 Pro
Stunde herstellen. Was nicht möglich ist, ist nicht möglich.
Karl Heinz schrieb:> Einige Warnungen kann man ignorieren. Manche allerdings nicht.> Blöd natürlich, wenn es in deinem Projekt einige Warnungen gibt und du> die nicht so wichtigen von den tatsächlich wichtigen nicht trennst. Mach> es dir zur Maxime: Ein Projekt muss komplett ohne Warnungen kompilieren.> Selbst wenn es eine tatsächlich harmlose Warnung ist, wird ihre Ursache> beseitigt.
Gar keine Frage. Aber "ISR(USART0_RX_vect)" ist der richtige Handler
beim Atmega 1284.
Tobi schrieb:> Die Lösung ware es die Abtastfreqeunz nach unten zu schrauben??>> Haltet ihr das für sinvoll den Messwert zu Mitteln oder soll ich mir das> sparen??
Ich mittel die auch eher selten.
Aber sowas ist doch keine Lösung. Ein Programm stürzt nicht ab, weil man
Messwerte mittelt.
mfg.
berechnen, da komm ich auf 50
> kHz.
Und nein.
Du hast die falsche Formel benutzt.
Lass mal die Formel Formel sein und überleg dir lieber, wie oft die ISR
pro Sekunde aufgerufen wird.
FAQ: Timer
Thomas Eckmann schrieb:> Karl Heinz schrieb:>> Einige Warnungen kann man ignorieren. Manche allerdings nicht.>> Blöd natürlich, wenn es in deinem Projekt einige Warnungen gibt und du>> die nicht so wichtigen von den tatsächlich wichtigen nicht trennst. Mach>> es dir zur Maxime: Ein Projekt muss komplett ohne Warnungen kompilieren.>> Selbst wenn es eine tatsächlich harmlose Warnung ist, wird ihre Ursache>> beseitigt.>> Gar keine Frage. Aber "ISR(USART0_RX_vect)" ist der richtige Handler> beim Atmega 1284.
Mein Atmel-Studio behauptet da was anders.
Für einen Prozessor-Reset gibt es 2 Möglichkeiten
* Hardware
* falsche oder fehlende ISR
Dass seine Regelung nicht funktionieren wird, steht ausser frage. Aber
das ist kein Grund für einen Reset. Das Thema muss man natürlich
adressieren, ganz klar. Aber um den Prozessor-Reset zu finden ist es
erst mal Nebenschauplatz.
Seine Hardware kann ich nicht testen. Aber mein Atmel Studio behauptet,
aus welchem Grund auch immer, dass sich
1
USART0__RX_vect
mit 2 Stück Underscores (in Summe also 3) schreibt.
Karl Heinz schrieb:> Seine Hardware kann ich nicht testen. Aber mein Atmel Studio behauptet,> aus welchem Grund auch immer, dass sich>
1
> USART0__RX_vect
2
>
> mit 2 Stück Underscores (in Summe also 3) schreibt.
Wenn ich hingegen, anstatt einem Mega1284 einen Mega1284P einstelle,
dann ist USART0_RX_vect wieder richtig. :-)
>> Atmeg führt reset ohne Grund durch
Die Aussage bezweifle ich. Der Prozessor mag zwar vielleicht
einen Reset durchlaufen aber sicherlich nicht ohne Grund.
Und der Grund liegt sicher nicht im Fehlverhalten des Prozessors.
>Danach scrollst du mal hoch und korrigierst ALLE Warnungen, die du vom>Compiler kriegst.
Tut mir leid, aber bei mir kommt keine Fehlermeldung.
Ich werde auf jeden Fall meine Regelung überarbeiten, sodass die auch
Funktioniert.
Kann das mit dem Reset daran leigen, das zuviel ISR aufgerufen werden?
>Die Aussage bezweifle ich. Der Prozessor mag zwar vielleicht>einen Reset durchlaufen aber sicherlich nicht ohne Grund.
Hast recht, blos mir erschließt sich der Grund noch nicht ganz.
Tobi schrieb:> berechnen, da komm ich auf 50 kHz.
Die Aufrufrate der ISR ist ClkIO / (Prescaler * (OCR + 1)).
Karl Heinz schrieb:> Aber mein Atmel Studio behauptet,> aus welchem Grund auch immer, dass sichUSART0__RX_vect> mit 2 Stück Underscores (in Summe also 3) schreibt.
Da musst Du wohl mal ein Update machen, Atmel hat wohl im AVR-Studio 5.1
beim iom1284.h ein paar Unterstriche reingemurkst, die im iom1284p.h und
in einer aktuellen Toolchain nicht drin sind.
> Wenn ich hingegen, anstatt einem Mega1284 einen Mega1284P einstelle,> dann ist USART0_RX_vect wieder richtig. :-)
Kein Wunder.
Tobi schrieb:> Hier mal der Schaltplan.
- man sieht nicht, welche Kreuzungen verbunden sind => da fehlen die
Punkte!
- 100µF ist vermutlich falsch? => 100nF Keramik!
- jedes VCC-GND-Pärchen braucht einen eigenen C
- wie ist das Layout? => die Cs müssen sehr nah an µC sein, der GND muss
'solide' sein, d.h. wenig 'zerrupft'.
Gruß Dietrich
Karl Heinz schrieb:> Und PS:> Eine derartige> WarnungC:\Projekte\AVR\M1284_PWM\M1284_PWM\M1284_PWM.c(60,1):> 'USART0_RX_vect' appears to be a misspelled signal handler [enabled by> default]> ist eine, die man nicht ignorieren darf.Thomas Eckmann schrieb:> Gar keine Frage. Aber "ISR(USART0_RX_vect)" ist der richtige Handler> beim Atmega 1284.Karl Heinz schrieb:> Aber mein Atmel Studio behauptet,> aus welchem Grund auch immer, dass sichUSART0__RX_vect> mit 2 Stück Underscores (in Summe also 3) schreibt.Karl Heinz schrieb:> Wenn ich hingegen, anstatt einem Mega1284 einen Mega1284P einstelle,> dann ist USART0_RX_vect wieder richtig. :-)Tobi schrieb:> Tut mir leid, aber bei mir kommt keine Fehlermeldung.
Das ist ja eine feine Sache, wenn das Kompilieren des gleichen
Quelltextes bei mehreren Leuten unterschiedliche Resultate liefert.
Mit so etwas kann man sich die Schwindsucht an den Hals ärgern...
SCNR Paul
Dietrich L. schrieb:> - 100µF ist vermutlich falsch? => 100nF Keramik!
Der Elko kann zwar Ladung speichern, aber schnelle Spannungseinbrüche
von Prozessor-Stromschwankungen puffern/abblocken sicherlich nicht.
Paul Baumann schrieb:> Das ist ja eine feine Sache, wenn das Kompilieren des gleichen> Quelltextes bei mehreren Leuten unterschiedliche Resultate liefert.
Man bräuchte ja bloss mal den gleichen Compiler und die
gleichen Compiler-Flags verwenden .....
Dietrich L. schrieb:> - man sieht nicht, welche Kreuzungen verbunden sind => da fehlen die> Punkte!> - 100µF ist vermutlich falsch? => 100nF Keramik!> - jedes VCC-GND-Pärchen braucht einen eigenen C> - wie ist das Layout? => die Cs müssen sehr nah an µC sein, der GND muss> 'solide' sein, d.h. wenig 'zerrupft'.
Sind natürlich 100 nF.
Wie erkenne ich welche vcc-gnd zusammen gehören.
Kondensatoren sind dierekt am Mikrocontroller. Die gnd-leitungen sind
alle möglichst kurz, soweit das auf einem Steckbrett möglich ist.
Tobi schrieb:> Wie erkenne ich welche vcc-gnd zusammen gehören.
Es gehört alles zusammen. Alle 5V gehören nah zusammen, und
alle GND Pins gehören nah zusammen. Und nah dazwischen die
Abblock-Cs.
Nackter Prozessor auf Steckbrett ist schon mal verdächtig.
Am Besten zu zeigst (in bewährter Salami-Taktik) jetzt auch mal
deinen Breadboard-Aufbau.
Karl Heinz schrieb:> Für einen Prozessor-Reset gibt es 2 Möglichkeiten> * Hardware> * falsche oder fehlende ISR
... oder als dritte Möglichkeit einen überlaufenden Stack durch:
Tobi schrieb:> Kann das mit dem Reset daran leigen, das zuviel ISR aufgerufen werden?
Tobi schrieb:> Wie erkenne ich welche vcc-gnd zusammen gehören.
du machst doch den Plan also legst du fest welche VCC und welche GND
zusammen gehören, es ist DEINE Schaltung, wobei alle GND zusammen
gehören (selten AGND noch mal extra geführt wird) und AVCC evt.
fremdversorgt wird oder an VCC geklemmt, aber das entscheidest doch du
als Planer.
Tobi schrieb:> Kondensatoren sind dierekt am Mikrocontroller. Die gnd-leitungen sind> alle möglichst kurz, soweit das auf einem Steckbrett möglich ist.
Wenn ich Steckbrett höre wird's mir schon schwummrig ....
Ich möchte mal provokativ eine voreilige Frage stellen:
Warum hat ATMEL die Quarz-Anschlüsse 7, 8 direkt neben einen
Ground Pin (6) plaziert?
Karl Heinz schrieb:> Für einen Prozessor-Reset gibt es 2 Möglichkeiten> * Hardware> * falsche oder fehlende ISR
Zählt ein eventuell falsch konfigurierter Watchdog als Hardware? :-)
Karl Heinz schrieb:> Für einen Prozessor-Reset gibt es 2 Möglichkeiten> * Hardware
Das ließe sich leicht mit irgendeinem trivialen Programm testen, um so
auszuschließen, dass es die Hardware ist.
0815 schrieb:> Karl Heinz schrieb:>> Für einen Prozessor-Reset gibt es 2 Möglichkeiten>> * Hardware>> * falsche oder fehlende ISR>> ... oder als dritte Möglichkeit einen überlaufenden Stack durch:>> Tobi schrieb:>> Kann das mit dem Reset daran leigen, das zuviel ISR aufgerufen werden?
Das kann bei ihm nicht passieren.
Er hat keine sei() in der ISR (zumindest nicht in dem Teil, den man
sehen kann)
MWS schrieb:> Da musst Du wohl mal ein Update machen, Atmel hat wohl im AVR-Studio 5.1> beim iom1284.h ein paar Unterstriche reingemurkst, die im iom1284p.h und> in einer aktuellen Toolchain nicht drin sind.
Merci.
Hab den Update auf 6.2 SP2 gemacht und da ist dann alles so wies sein
soll.
Nachdem es hier urplötzlich sooooo still geworden ist
funktioniert offensichtlich alles, oder der Prozessor
funktioniert nicht richtig, ist an allem schuld:
- der Steckbrett Aufbau ist sicherlich von höchster Güte und
übertrifft alles was sonst in aufwendiger Kleinarbei hand-
geroutet auf gedruckte Schaltungen gebracht wird.
- die 100uF Kondensatoren im Schaltplan sind gaaaaaaaanz
sicher in Wirklichkeit sehr gute 100nF Kondensatoren.
Ich schwör! Doppelschwör!
- die Lastkapazitäten am Quarz sind sicherlich päpstlicher
als der Papst vorschreibt verdrahtet.
Und das alles selbstverständlich auf dem Steckbrett wo alleine
der Mega1284 im DIL Gehäuse eine räumliche Ausbreitung von
52mm x 16 mm einnimmt was der Verbindung der einzelnen Power-
Pins auf jedem Fall nur förderlich ist. Ganz zu schweigen von
den Abblock Kondensatoren die ja innigst mit den Power Pins
verbunden sind.
Deswegen brauchen wir uns den Steckbrett-Aufbau auch gar nicht
erst anschauen.
Arduinoquäler schrieb:> Deswegen brauchen wir uns den Steckbrett-Aufbau auch gar nicht> erst anschauen.
WIR?
Vielleicht ist der TO nicht gewillt, sich mit Trollen
auseinanderzusetzen
und übergeht deshalb Deine Anwürfe? Möglich wäre das doch...
Arduinoquäler schrieb:> Nachdem es hier urplötzlich sooooo still geworden ist> funktioniert offensichtlich alles, oder der Prozessor> funktioniert nicht richtig, ist an allem schuld
Vielleicht muss man ja auch Geld für sein Hobby verdienen und kann nicht
immer hier folgen.
Hab jetzt noch ein bischen was ausprobiert und es klappt jetzt wieder.
Ich habe folgendes geändert:
- Alle Deklarationen aus den ISR raus
- Abtastfreqeunz nach unten geschraubt, sodass sich der µC nicht selbst
einholt
- Regleralgorithmus in die main gepackt
Am Aufbau auf dem Steckbrett hab ich nichts verändert.
Tobi schrieb:> Hab jetzt noch ein bischen was ausprobiert und es klappt jetzt wieder.> Ich habe folgendes geändert:
Das steht allerdings in einem gewissen Widerspruch zu der
Aussage dass bei 1 MHz alles funktioniert hat .....
Arduinoquäler schrieb:> Das steht allerdings in einem gewissen Widerspruch zu der> Aussage dass bei 1 MHz alles funktioniert hat .....
So im Nachhinein, denke ich das es da auch schon nicht funktioniert hat.
Blos es hat sich nicht so gezeigt.
Da hat schon die Abtastzeit des Reglers nicht gepasst. Da bei 1MHz das
gleiche Problem mit der Rechenzeit auftritte wie bei 20MHz.
Hat halt blos irgendwie nicht den Reset bei 1MHz durchgeführt.
Problem erfolgreich vertrieben. Auch wenn mir der Weg noch nicht zu
hundert Prozent klar ist.