Forum: Mikrocontroller und Digitale Elektronik Gibts nen Interrupt für Spannung fällt weg und wie schreibt man eigentlich ins EEprom?


von He G. (dare)


Lesenswert?

Hi mal wieder!
Ich würde gerne ein paar Daten erhalten (Tacho) und würde diese darum 
gern ins EEprom schreiben. Ich kann natürlich nicht alle paar Sekunden 
schreiben, da dann die Schreibzyklen schnell ausgeschöpft wären.
Nun ist mir aufgefallen, dass meine Schaltung (durch Kondensatoren etc 
vermutlich) immer noch ein bisschen anbleibt, nachdem die Netzspannung 
entfällt (locker ne halbe bis eine Sekunde, und zwar samt Display). Gibt 
es irgendeine Möglichkeit diesen Event zu nutzen um die Daten zu 
speichern?
Grüße & Dank!

von Johannes M. (johnny-m)


Lesenswert?

He Gr wrote:
> Gibt
> es irgendeine Möglichkeit diesen Event zu nutzen um die Daten zu
> speichern?
Da es sich offensichtlich um einen AVR handelt (und das gehört in den 
Betreff und nicht irgendwo versteckt in den Text!), sollte das mit dem 
Analog-Komparator machbar sein.

> Wie schreibt man überhaupt ins EEprom? (AVR Studio, C)?
AVRStudio kann kein C. Wenn Du was in C programmieren willst, musst Du 
WINAVR installieren. Und in der dazugehörigen Dokumentation, die 
automatisch mitinstalliert wird, sind die Funktionen zum Zugriff auf 
EEPROM usw. beschrieben.

> Und noch etwas: angenommen, ich messe alle halbe Sekunde die Frequenz
> des Rades und generiere daraus meine Geschwindigkeit. Wie errechne ich
> daraus am besten die Distanz? Einfach ne Variable und jedes Mal
> hochrechnen, oder?!
Naja, was ist denn die zurückgelegte Strecke? Umfang des Rades mal 
Anzahl der Umdrehungen...

von Karl H. (kbuchegg)


Lesenswert?

He Gr wrote:

> Nun ist mir aufgefallen, dass meine Schaltung (durch Kondensatoren etc
> vermutlich) immer noch ein bisschen anbleibt, nachdem die Netzspannung
> entfällt (locker ne halbe bis eine Sekunde, und zwar samt Display). Gibt
> es irgendeine Möglichkeit diesen Event zu nutzen um die Daten zu
> speichern?

Sicher.
Zwischen Gleichrichter und Siebelko hängst du noch eine kleinen
Kondi und eien Diode rein, so dass du nach dem Gleichrichter die
eigentliche Versorgungsspannung abnehmen kannst. An dieser Stelle
ist die Spannung dann weg, während der große Siebelko deine
Schaltung noch mit Strom versorgt.
Diese Spannung überwachst du und wenn sie einbricht, weiß
dein Programm, dass in Kürze mit einem Spannungsausfall zu
rechnen sein wird.

> Wie schreibt man überhaupt ins EEprom? (AVR Studio, C)?

http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#EEPROM

> Und noch etwas: angenommen, ich messe alle halbe Sekunde die Frequenz
> des Rades und generiere daraus meine Geschwindigkeit. Wie errechne ich
> daraus am besten die Distanz?

 Delta_s = v * Delta_t

 Delta_s aufsummieren.

von Fred (Gast)


Lesenswert?

---> Brown-out Detection

löst ein Int. bei 2 verschiedenen Beriebsspannungen aus.

Gruß fred

von Sven S. (stepp64) Benutzerseite


Lesenswert?

Na dann schau mal in meinen Thread "Wie lange hält die Spannung nach 
Stromausfall?". Dort behandle ich dieses Thema gerade (allerdings mit 
einem PIC).

Ich werde das Stromausfallsignal an einen Komparatoreingang schalten und 
die Referenzspannung auf ca. 4V festlegen. Wenn nun die Spannung vor der 
Diode ausfällt, löst der Komparator einen Interrupt aus und ich kann 
noch ein paar Bytes ins EEPROM sichern, da der große Elko hinter der 
Diode die Spannung noch ca. 1 Sekunde hält.

@Fred: Ja aber dann ist es schon zu spät, da die Spannung schon weg ist.

Sven

von He G. (dare)


Lesenswert?

> Da es sich offensichtlich um einen AVR handelt (und das gehört in den
> Betreff und nicht irgendwo versteckt in den Text!), sollte das mit dem
> Analog-Komparator machbar sein.

Sorry, stimmt.

>> Wie schreibt man überhaupt ins EEprom? (AVR Studio, C)?
> AVRStudio kann kein C.

Komisch. Ich entwickle schon ein bisschen in C. Und zwar im Studio.


Aber vielen Dank Euch allen. Ich checke mal das mit der Brown out etc...
Gürße!

von Johannes M. (johnny-m)


Lesenswert?

He Gr wrote:
>>> Wie schreibt man überhaupt ins EEprom? (AVR Studio, C)?
>> AVRStudio kann kein C.
>
> Komisch. Ich entwickle schon ein bisschen in C. Und zwar im Studio.
Dann hast Du aber vermutlich auch den WINAVR bereits installiert...

von Fred (Gast)


Lesenswert?

@ Johannes M.

die Ausgangsfrage ist ein bißchen verdreht. Aber mit eimem
bißchen gutem Willen kann mans verstehen.

Gruß Fred

von He G. (dare)


Lesenswert?

Hmm... ich finde zu brown out nicht so viel. Es geht da immer nur um 
einen reset. Wie kann ich denn ne Interruptroutine anhängen bzw. dem 
Reset vorschieben?
Oder über A/D: muss ich da immer wieder die Spannung messen oder kann 
ich nen Interrupt für Spannungsabfall basteln?
Nen negierer davor, der nen Pin high setzt, wenn die Spannung abfällt?
Quasi so:


+ ---- Spannungsregler etc. --- VCC

VCC ---| Wenn + einbricht wird über VCC aus dem Kondensator | PIN
+   ---| high gesetzt                                       |


Welche Pins am Atmega32 taugen denn dafür ne Interruptroutine 
auszulösen, wenn sie high gesetzt werden?

Danke Euch!

von Karl H. (kbuchegg)


Lesenswert?

He Gr wrote:
> Hmm... ich finde zu brown out nicht so viel. Es geht da immer nur um
> einen reset. Wie kann ich denn ne Interruptroutine anhängen bzw. dem
> Reset vorschieben?

Vergiss den Brown Out. Der hilft dir nichts.
Wenn der Brown Out anspricht, ist die Versorgungsspannung des
Prozessors selbst schon am Einbrechen -> du hast kaum noch
Zeitreserven bis die Spannung komplett weg ist.

> Oder über A/D: muss ich da immer wieder die Spannung messen oder kann
> ich nen Interrupt für Spannungsabfall basteln?

Du musst keine Spannung messen.
Deine entkoppelte Versorgunsspannung begrenzt du wieder auf Vcc
(zb. mit einer Zenerdiode) und legst sie auf einen normalen Pin.

> Welche Pins am Atmega32 taugen denn dafür ne Interruptroutine
> auszulösen, wenn sie high gesetzt werden?

Datenblatt studieren.

von Johannes M. (johnny-m)


Lesenswert?

He Gr wrote:
> Hmm... ich finde zu brown out nicht so viel. Es geht da immer nur um
> einen reset. Wie kann ich denn ne Interruptroutine anhängen bzw. dem
> Reset vorschieben?
Gar nicht.

> Oder über A/D: muss ich da immer wieder die Spannung messen oder kann
> ich nen Interrupt für Spannungsabfall basteln?
Wieso denn ADC? Ich habe oben doch schon den Analog-Komparator erwähnt. 
Und ein Blick ins Datenblatt sollte Dir sofort verraten, mit welchen 
Pins der arbeitet.

> Nen negierer davor, der nen Pin high setzt, wenn die Spannung abfällt?
Auweia... Auch noch High...

von Johannes M. (johnny-m)


Lesenswert?

Karl heinz Buchegger wrote:
> Du musst keine Spannung messen.
> Deine entkoppelte Versorgunsspannung begrenzt du wieder auf Vcc
> (zb. mit einer Zenerdiode) und legst sie auf einen normalen Pin.
Oder so...

von Sven S. (stepp64) Benutzerseite


Lesenswert?

Warum machst du es nicht so, wie einige hier schon geschrieben haben. 
Komparator oder Z-Diode. ADC ist quatsch, da du ständig messen müsstest 
und der Stromausfall eventuell genau dann kommt, wenn der ADC gerade 
beschäftigt ist. Brown-Out ist auch Quatsch (warum hab ich schon 
erwähnt). Also les dich in die benannten Themen ein und frag wenn du 
etwas nicht verstehst konkret nach.

Und PIC oder AVR ist eigentlich egal, da beide auf benannte Weise 
gesteuert werden können. Es sind halt nur andere Pins und andere 
Register zu verwenden.

Sven

von He G. (dare)


Lesenswert?

Ich glaub, ich habs schon. Ich habe ohnehine ne entkoppelte 
Spannungsversorgung. Von da aus gehe ich Richtung Komparator und setze 
die Register so, dass bei fallender Flanke ein Interrupt ausgelöst wird.
Werde mich daran nachher mal versuchen. Bei Fragen, frag ich.
Grüße!

von He G. (dare)


Lesenswert?

Ich noch mal.
Kann mir jemand was zu dieser Fehlermeldung sagen?

error: static declaration of '__vector_18' follows non-static 
declaration

Der Aufruf sieht so aus:
1
ISR(ANA_COMP_vect)
2
{
3
  //save to eeprom
4
}

Danke!

von Karl H. (kbuchegg)


Lesenswert?

He Gr wrote:
> Ich noch mal.
> Kann mir jemand was zu dieser Fehlermeldung sagen?
>
> error: static declaration of '__vector_18' follows non-static
> declaration
>

Hört sich so an als ob du versuchst eine ISR in einer anderen
ISR zu definieren. Überprüf mal deine { - } Hierarchien.
Wahrscheinlich hast du sowas

ISR( xxxxx )
{
  ....
  if( ... )
  {
     ...
}

ISR( yyyy )
{
}

Also irgendwo eine } vergessen.
Ansonsten poste mal den relevanten Abschnitt. Daran denken, dass
in dem Fall der Fehler wahrscheinlich vor der angemäkelten
Funktion liegen wird.

von He G. (dare)


Lesenswert?

Tatsächlich. Hab nen Klammerfehler übersehen. Peinlich peinlich. Aber 
danke!

von Fred (Gast)


Lesenswert?

@ Karl heinz Buchegger

> Vergiss den Brown Out

Wenn mann den bei 4V auslöst, hatt mann genügend Zeit
ca 500 Byte im EE zu speichern. (Mega8 1Mhz Tackt intern!)
Bis die Spannung auf 2,7V zusammenbricht (4,7µF Stütz und nichts
anderes drann!!!) vergehen mehrere ms. Das ist für ein µC eine EWIGKEIT.

ist getestet!

Gruß Fred1

von Simon K. (simon) Benutzerseite


Lesenswert?

Fred wrote:
> @ Karl heinz Buchegger
>
>> Vergiss den Brown Out
>
> Wenn mann den bei 4V auslöst, hatt mann genügend Zeit
> ca 500 Byte im EE zu speichern.
Aber leider nicht sehr sicher.

> Bis die Spannung auf 2,7V zusammenbricht (4,7µF Stütz und nichts
> anderes drann!!!) vergehen mehrere ms. Das ist für ein µC eine EWIGKEIT.
Für ein EEPROM ist das gewiss keine Ewigkeit, zumindest beim schreiben.

von Fred (Gast)


Lesenswert?

> Für ein EEPROM ist das gewiss keine Ewigkeit, zumindest beim schreiben.

testes mal! 512 Byte sicher 1024 Byte keine Garantie
obacht: keine aktiven ISR's im Hintergrund!

Gruß Fred

von He G. (dare)


Lesenswert?

Ist ja nun schon alles am Komparator und läuft.
Nun schlage ich mich mit dem EEPROM-Kram rum. Die Beispiele aus dem Tut 
wolln nicht.
Mal weiter suchen. Ich will nur eine variable lesen und schreiben aber 
syntaktisch gibts da wohl fehler. Bekomme zumindest Copilerfehler. Das 
section attribute könne für lokale Variablen...
Such mir mal ne andere Anleitung...

von Johannes M. (johnny-m)


Lesenswert?

He Gr wrote:
> Das section attribute könne für lokale Variablen...
Musst beachten, dass EEMEM-Variablen immer global sind und auch global 
deklariert werden müssen.

von Fred (Gast)


Lesenswert?

und wieder einer aus dem C-Lager.

Johannes M.

der nicht weiß wie lange es dauert?!

Fred

von He G. (dare)


Lesenswert?

Jup, schon dahinter gekommen ;)
Danke

von He G. (dare)


Lesenswert?

Was mir gerade zu schaffen macht ist, dass ich nur uint16_t schreiben 
kann.
Die Variable, die ich abspeichern will muss aber 5(besser noch 6) 
Zeichen vorm Komma und 2(besser noch 3) dahinter packen. Wahlweise wäre 
auch ein ausreichend großer Zahlenbereich schick. Das Komma kann ich mir 
dann ja immer noch verschieben wie ich lustig bin.
Aus den tuts werd ich nicht so richtig klug. Ich les mal noch was...

von Simon K. (simon) Benutzerseite


Lesenswert?

Fred wrote:
> und wieder einer aus dem C-Lager.
>
> Johannes M.
>
> der nicht weiß wie lange es dauert?!
>
> Fred

ATMega8 10/06 Datenblatt Seite 21:
EEPROM Programming Time (Write from CPU): 8,5ms bei 1MHz clock.
512 Bytes würden meiner Meinung nach fast 4,5 Sekunden dauern. Na dann.

PS: Was hat eigentlich C damit zu tun?

von Johannes M. (johnny-m)


Lesenswert?

Simon K. wrote:
> PS: Was hat eigentlich C damit zu tun?
...und v.a.: Was habe ich damit zu tun? Ich habe zu dem Thema 
keinerlei Äußerung abgegeben...

von He G. (dare)


Lesenswert?

Hmm...
Wenn ich das Ereignis absichtlich triggere, dann funktioniert alles 
prima.
Leider reicht die Zeit im echten Leben anscheinend doch nicht für den 
Interrupt und das Speichern.
Irgendwie geht auch doch alles ziemlich schnell aus, wenn das Netzteil 
ab ist. Das weiterlaufen hatte ich wohl in einer anderen Umgebung 
beobachtet.
Ich habe schon zwei 10uF-Kondensatoren zusätzlich eingelötet - ohne 
Erfolg.
Sollte ich da nen noch dickeren nehmen oder gibt es irgendeine 
brauchbarere Pufferschaltung?
Danke & Grüße!

von Sven S. (stepp64) Benutzerseite


Lesenswert?

Das hängt auch von deiner Schaltung ab. Einfach nur nen Elko in die 
Zuleitung hängen hilft nicht. Du musst in deine Spannungsversorgung noch 
ein Diode hängen. Vor der Diode greifst du das Signal für den 
Spannungsausfall ab und nach der Diode kommt der Elko. Damit erreichst 
du, das die Spannung vor der Diode sofort ausfällt durch den Elko der µC 
aber noch eine Weile versorgt wird. Ohne diese Diode misst du nur die 
Spannung am Elko, welche aber genau die gleiche ist wie die am µC.

Also so

     ---------------- Messsignal µC
     |
+5V --- A Diode K --- Versorgung µC
                   |
                  ---
                  --- Elko
                   |
                  ---

Sven

von He G. (dare)


Lesenswert?

Das schon klar. Die Diode existiert. Problematisch könnte sein, dass 
außer dem Mega noch ne Reihe anderer Verbraucher HINTER der Diode 
hängen. Die ziehen dann vielleicht einfach alles an Saft ab.
Ich versuchs mal anders. Derzeit hab ich eh das Problem, dass a) der 
7805 immer tierisch heiss wird, sobald die Hintergrundbeleuchtung des 
LCD an ist und b) bei Betrieb am Netzteil nur die obere Zeile des LCD 
angezeigt wird (kommt der Saft übern ISP ist das Problem nicht da)

von He G. (dare)


Angehängte Dateien:

Lesenswert?

Hab den Schaltplan mal geändert.
In dieser Version hängen die anderen Verbraucher VOR der Diode. So 
funktioniert zwar das LCD nicht, wenn nur der ISP angeschlossen ist aber 
was solls.
Bevor ich das alles umlöte - müsste das theoretisch so funktionieren?
Macht vielleicht ein größerer Kondensator hinter der Diode Sinn (derzeit 
10u)?
Achtung: hab den 7805 gegen nen Lowdrop getauscht. Die Pinbelegung ist

Vin
Vout
GND/adj

Fällt sonst noch was auf?

Grüße!

von Andreas K. (a-k)


Lesenswert?

He Gr wrote:

> Fällt sonst noch was auf?

Dass der Anhang kein Schaltplan ist, sondern ein Layout.

Und Bildformate

von Sven S. (stepp64) Benutzerseite


Lesenswert?

Hm, weiß nicht. Du steuerst ja sicher die anderen Verbraucher über den 
µC. Damit bekommen die anderen Verbraucher 5V Betriebsspannung der µC 
aber nur ca. 4,3 (wegen der Diode). Normalerweise mögen µC keine 
Spannungen an ihren Eingängen welche mehr wie 0,5V über der 
Betriebsspannung liegen. Das könnte aber nun passieren. Denk da noch mal 
drüber nach. Und nein, auch ich werde mir nicht die Platine antun. Ein 
Schaltplan wär schon besser.

Sven

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Der Controller könnte die anderen Verbraucher auch mit einem
p-Kanal-FET abschalten, sowie er einen Ausfall der Primärversorgung
entdeckt hat.  Dann hat er die restliche Kondensatorladung für sich,
und am Rdson des FET fallen nur 100...200 mV ab, wenn man ihn
passend dimensioniert.

Ein 7805 ist natürlich an sich schon ein Übel, wenn man mit Energie
sparen will. ;-)

von Marcus W. (blizzi)


Lesenswert?

He Gr wrote:
> Derzeit hab ich eh das Problem, dass a) der
> 7805 immer tierisch heiss wird, sobald die Hintergrundbeleuchtung des
> LCD an ist

Naja, wieviel Watt muss der Linearregler denn verbraten?
Was hast du für eine Eingangsspannung? Hängt das Ding im Auto an 14 
Volt?
Falls ja ist das normal das der heizt, musst du eben gut kühlen.

> und b) bei Betrieb am Netzteil nur die obere Zeile des LCD
> angezeigt wird (kommt der Saft übern ISP ist das Problem nicht da)

Das klingt aber eher nach einer unsauberen Initialisierung.
Kannst du schon Text anzeigen oder zeigt es nur den schwarzen Balken an?

Sven Stefan wrote:
> Hm, weiß nicht. Du steuerst ja sicher die anderen Verbraucher über den
> µC. Damit bekommen die anderen Verbraucher 5V Betriebsspannung der µC
> aber nur ca. 4,3 (wegen der Diode). Normalerweise mögen µC keine
> Spannungen an ihren Eingängen welche mehr wie 0,5V über der
> Betriebsspannung liegen.

Mit einer Schottky-Diode sollte es funktionieren oder?

von He G. (dare)


Lesenswert?

Hab einfach noch ne Diode vor die VCC der angeschlossenen Schaltungen 
gehängt. Mach ich mir wann anders nen Kopf drüber obs schicker geht.
Das mit dem LCD passt alles, wenn es über ISP versorgt wird. Bei Betrieb 
über Netzteil kann ich nur die obere Zeile nutzen. Unten bleibts LEER. 
Keine schwarzen Balken oder so.
Was ist denn mit den 10u? Reicht das um ein paar 16 bit Vars ins EEprom 
zu schreiben?
Soll ich den größer Dimensionieren.
Danke & Grüße.

von Marcus W. (blizzi)


Lesenswert?

He Gr wrote:
> Das mit dem LCD passt alles, wenn es über ISP versorgt wird. Bei Betrieb
> über Netzteil kann ich nur die obere Zeile nutzen. Unten bleibts LEER.
> Keine schwarzen Balken oder so.

Klingt trotzdem nach einem Softwareproblem.
Eventuell sind die Wartezeiten falsch gesetzt.
Die externe Spannung wird vielleicht langsamer steigen als die 
ISP-Spannung.
Möglicherweise sendet der Controller da schon die init-Sequenz, obwohl 
das Display noch nicht bereit ist.

Oder anders:
Der ISP Adapter steckt, du programmierst, der Programmer führt einen 
Reset aus.
Die Versorgungsspannung wird dadurch nicht unterbrochen, daher ist das 
Display weiterhin bereit.
Sobald der Controller resettet wurde kann (und darf) er dem Display 
sofort Signale senden und das Display reagiert wie gewünscht.

von He G. (dare)


Lesenswert?

Hmm.. ich versuchs mal mit ein paar Delays...
Was anderes: die Daten im EEPROM: gibts ne Möglichkeit, diese zu 
erhalten, wenn ich den Atmega neu programmiere ohne sie gleichzeitig zu 
sperren?
Also so, dass die Anwendung die Daten überschreiben können, diese aber 
nach nem Update des Atmega erhalten bleiben.
Hab schon was gegoogled aber irgendwie werd ich nicht richtig klug 
draus...

von Johannes M. (johnny-m)


Lesenswert?

EESAVE-Fuse programmieren...

von He G. (dare)


Lesenswert?

Sorry, hatte das falsch verstanden. Dachte, das würde den Inhalt des 
EEPROM dauerhaft schützen (er könnte auch aus dem Programm nicht mehr 
manipuliert werden). Hab gerade eine passendere Beschreibung gefunden.
Danke!

von He G. (dare)


Lesenswert?

So. Ich bin ein ganzes Stück weiter aber noch nicht am Ziel.
Folgende Beschaltung:

+5V
|
10uF---Diode---470uF---Atmega VCC,Atmega Pin3 (AIN0)
|
Diode
|
10uF
|
Display, Messschaltungen, Atmega Pin4 (AIN1)

Im Quelltext:

ACSR = (1 << ACIE); //eigentlich nur fallende Flanke auswerten aber zu 
testzwecken...

ISR ( ANA_COMP_vect )
{4 Mal eeprom_write_word(...

Der Interrupt wird manchmal ungewollt ausgelöst und macht dann auch was 
er soll. Wenn ich den Saft wegnehme, dann klappt das allerdings nicht. 
Reichen 470u nicht aus oder liegt der Fehler woanders? Die 
Displaybeleuchtung wird über einen Transistor geschaltet. Wenn die 
Netzspannung weg ist (ISP hängt mit am Verbrauchernetz, da kann man das 
gut beobachten), dann bleibt das Display leer (erhält ja keinen Saft), 
die Beleuchtung geht aber. Der Saft muss irgendwie über den Pin am Mega 
kommen. Das ist ja ein ziemliches Desaster, weil der Pin überhaupt nicht 
so stark belastet werden darf. Kanns daran liegen? Das die Beleuchtung 
den 470u C leersaugt, bevor der Mega speichern kann? Die Schaltung ist 
überhaupt nur so aufgebaut um diese Funktion nutzen zu können. Ich 
meine, ich kann ja nicht jede Sekunde ins EEPROM schreiben (dann ist das 
Ding ja ruckzuck kaputt) und manuelles Speichern fällt auch weg. Wie 
kann man das lösen?

von Sven S. (stepp64) Benutzerseite


Lesenswert?

Eigentlich sollte das gehen. Du musst allerdings die Spannung für den 
Eingang, welcher die Spannung misst vor den Dioden abgreifen. Sonst 
misst du ja die Spannung an dem 470µ und der Elko hat sich schon halb 
entladen, wenn du merkst, dass die Spannung weg ist. Desshalb baut man 
ja die Dioden ein. Wenn die Spannung vor den Dioden weg ist, merkst du 
es sofort, da kein Strom durch die Dioden zurück fliesen kann. Der µC 
hat aber noch Saft bis der Elko leer ist.

Ich hatte bei mir auch bemerkt, das der Interrupt mehrmals ausgelöst 
wird, wenn die Spannung verschwindet. Sowohl bei steigender als auch bei 
fallender Flanke. Liegt wohl daran, dass der Komparator am Schwellwert 
mehrmals hin und her flattert und jedesmal einen Interrupt auslöst. Das 
musst du SW-technisch abfangen.

Sven

von He G. (dare)


Lesenswert?

So hatte ich das schon. War aber zu nervös. Bei der jetzigen Schaltung 
ist es doch so, dass die Spannungsversorgung und der Sollwert 470u zur 
Verfügung haben (alles hinter der Diode) und der Istwert nur 10u hinter 
seiner Diode. Will sagen, der 10u C sollte doch ruckzuck leer sein und 
die Spannung am Ist-Pin weg.

von Falk B. (falk)


Lesenswert?

@ He Gr (dare)

>ist es doch so, dass die Spannungsversorgung und der Sollwert 470u zur
>Verfügung haben (alles hinter der Diode) und der Istwert nur 10u hinter
>seiner Diode.

Wozu?

> Will sagen, der 10u C sollte doch ruckzuck leer sein und
>die Spannung am Ist-Pin weg.

Rechung? Welche Last hängt an den 470uF und welche an den 10uF?

C = I *t / U (Kondensatorkapazität)

t = C * U / t

MFG
Falk

von He G. (dare)


Lesenswert?

Immer dieser Falk. Hilft an alles Fronten.
Der 10u Kondensator sollte ein bisschen abfedern damit nicht bei jedem 
kleinen Holperer der Interrupt ausgelöst wird. 470 hatte ich rumliegen 
und passte von der Bauform her noch auf die Platine ;)
An dem Zweig der Ist-Spannung hängen drei Messchaltungen mit recht 
geringem Verbrauch und ein LCD-Display samt Beleuchtung mit etwa 200+ 
mA. An der Soll-Spannung (470u) hängt nur der Mega und ein Quarzoszi.
Grüße!

von He G. (dare)


Lesenswert?

Ich hatte gerade ne Idee bezüglich eines Fehlers in der 
Transistor-Beschaltung. Obs was damit zu tun hat, weiss ich nicht aber 
ich werds auf jeden Fall morgen als ersten gerade rücken.

von dreg (Gast)


Lesenswert?

Hallo,

Zitat
Autor: Sven Stefan (stepp64)
Datum: 05.08.2008 16:40
...
Ich hatte bei mir auch bemerkt, das der Interrupt mehrmals ausgelöst
wird, wenn die Spannung verschwindet. Sowohl bei steigender als auch bei
fallender Flanke. Liegt wohl daran, dass der Komparator am Schwellwert
mehrmals hin und her flattert und jedesmal einen Interrupt auslöst. Das
musst du SW-technisch abfangen.
Zitat ende

Aus diesem Grund habe ich innerhalb des nicht-maskierbaren-Interrupts 
(automatisch höchste Priorität), am Ende der Abspeicherung der paar Byte 
ins EEPROM (bei mir ist es ein Betriebsstundenzähler) eine 
Endlosschleife. Da kann der COntroller auch keinen anderen Unsinn 
anstellen, da kein Austritt aus der ISR sattfindet und durch nichts 
anderes unterbrochen werden kann.

Gruss

dreg

von He G. (dare)


Lesenswert?

Mannmannmannmannmann... Man sollte sich die Bauteile schon noch mal 
ansehen bevor man sie verbaut. Reichelt hatte mir die falschen 
Transistoren geschickt und ich habe sie einfach verbaut. Ich hab die 
Schaltung dem Bauteil angepasst und nun gehts. Echt nervig. Die haben 
mir echt jede Menge falsche Teile geschickt. Nicht nur die Transistoren 
- auch noch Quarzoszis in 16 statt 4Mhz und Dioden 1N4004 statt wie 
bestellt 1N4001. Die 4004er können aber doch nur mehr ab und tun hier 
sowieso, was sie sollen, oder?
Jedenfalls tut jetzt alles, was es soll und ich bin happy.
Grüße!

von Sven S. (stepp64) Benutzerseite


Lesenswert?

dreg wrote:
> Aus diesem Grund habe ich innerhalb des nicht-maskierbaren-Interrupts
> (automatisch höchste Priorität), am Ende der Abspeicherung der paar Byte
> ins EEPROM (bei mir ist es ein Betriebsstundenzähler) eine
> Endlosschleife. Da kann der COntroller auch keinen anderen Unsinn
> anstellen, da kein Austritt aus der ISR sattfindet und durch nichts
> anderes unterbrochen werden kann.
>
So hatte ich das Anfangs auch. Mir gefiel aber nicht, dass der µC sich 
aufhängt, wenn die Spannung nur mal kurz den Messwert unterschreitet, 
ohne dass sich der Elko komplett entlädt. Ich habe nun in die ISR ein 2 
sekündige Warteschleife eingebaut. Der Elko hat sich nach ca. 1 Sekunde 
komplett entladen. Wenn der Strom also nur mal kurz weg ist, bleibt der 
Proc zwar zwei Sekunden stehen, macht aber danach normal weiter.

@ He Gr: Ist mir bei R bis jetzt noch nicht passiert. Nur das falsche 
Datenblatt zu einem bei R gekauften Transistor hatte ich letztens bei R 
mal gefunden. Da waren doch tatsächlich die Anschlüsse vertauscht (BC338 
und BC328). Die Dioden sollten passen. Sind halt für 400V und nicht nur 
für 100V.

von Sebastian (Gast)


Lesenswert?

Ich habe ein ähnliches Problem wie der OP, allerdings mit erschwerten 
Bedingungen. Vielleicht hat jemand einen Tip aus eigener Erfahrung.

Zur Situation:
Ein Tiny2313 wird über einen Schaltregler (24 Volt Eingangsspannung, 
MC34063 beschaltet wie in der Artikelsammlung) mit 5 Volt versorgt und 
bedient eine gemultiplexte LED-Ziffernanzeige, durchschnittlicher 
Strombedarf etwa 60 mA. Über den Komparator soll ein Interrupt ausgelöst 
werden, um ein einziges Datenbyte zuverlässig im EEPROM zu speichern, 
wenn die Betriebsspanung abfällt. Aber: Das Display verbraucht viel 
Strom, und würde einen Puffer-Elko (oder den am Ausgang des 
Schaltreglers) sehr schnell entladen.
Kann jemand abschätzen - da ich noch keinen aufgebauten Prototypen habe, 
um das auszuprobieren - ob es möglich ist, über Spannungsteiler ein 
Einbrechen der 24 Volt zu erkennen, in der ISR sofort das Display 
abzuschalten (was nicht wirklich sofort geht, schlimmstenfalls befindet 
sich der Tiny gerade in einer anderen ISR, um das Display zu 
aktualisieren) und mit der Restladung des 5V/100uF Elkos ein Byte 
sicher in den Speicher zu schreiben?
Das Display hardwaremäßig zu entkoppeln ist problematisch, da gemeinsame 
Kathode.

von Falk B. (falk)


Lesenswert?

@ Sebastian (Gast)

>werden, um ein einziges Datenbyte zuverlässig im EEPROM zu speichern,
>wenn die Betriebsspanung abfällt. Aber: Das Display verbraucht viel
>Strom, und würde einen Puffer-Elko (oder den am Ausgang des
>Schaltreglers) sehr schnell entladen

http://www.mikrocontroller.net/articles/Speicher#EEPROM_Schreibzugriffe_minimieren

MFG
Falk

von Sebastian (Gast)


Lesenswert?

Danke! Die Formel habe ich gesucht, wußte aber nicht, wie ich das als 
Suchbegriff nennen sollte.

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
Noch kein Account? Hier anmelden.