Forum: Mikrocontroller und Digitale Elektronik Atmega16 + DS18B20 + Timer = LCD Zeichenwirrwarr?


von Hubert (Gast)


Lesenswert?

Hallo Forum!

Ich rufe mittels Timer1 eine Routine auf, in der ein DS18B20 
Temperatursensor abgefragt wird.

Jedesmal, wenn ich das mache, hängt sich das LCD auf, es kommt anfangs 
nur wenig, dann immer mehr Zeichenwirrwarr auf dem Display.

Nachdem ich das Problem auf meine Lochrasterleiterplatte geschoben 
hatte, habe ich alles mal auf einem Breadboard mit komplett identischen 
(habe die Bauteile mehrfach) Komponenten aufgebaut.

- LCD 4x20 Zeichen (HDxxxxx standart aus Ebay)
- Atmega16
- Stabile 5V Spannungsversorgung

Das Display hängt an:
Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portc.3 , Db7 = Portc.7 , E = 
Portc.1 , Rs = Portc.0

Der 1wire Bus ist auf Pin D6.

Wenn ich die Routine ohne Timer1 aufrufe, ist alles bestens, das LCD 
stellt die Werte sauber dar. Benutze ich aber den Timer1 als Aufruf über 
Interrupt, hängt sich das LCD immer mehr auf.
Timer0 geht ebenso wenig wie Timer2, da hängt das Programm schon beim 
Aufruf des Timers.

Ich verwende KEINEN externen Quarz, der interne ist auf 8Mhz 
eingestellt.
Liegt hier die Ursache?

Programmiert habe ich das Prog in Bascom.

Viele Grüsse,
Hubert

von Nabernd (Gast)


Lesenswert?

Hubert schrieb:
> Ich rufe mittels Timer1 eine Routine auf, in der ein DS18B20
> Temperatursensor abgefragt wird.

Die Abfrage braucht eine Mindestzeit. In welchen Abständen machst Du 
das, und wie?

von Hubert (Gast)


Lesenswert?

Hallo!

Ich rufe die Routine ca. alle 2sec. auf, und in der Routine selbst 
befindet sich bereits eine Wartezeit von 500µs, um die Werte auslesen zu 
können.
Ohne Timer kein Problem... :(

Man merkt auch, dass der µC noch arbeitet- nur das LCD will nicht mehr.

Herzliche Grüsse,
Hubert

von Pete K. (pete77)


Lesenswert?

Na, wenn es ohne Timer1 geht, dann wird hier die Ursache zu finden sein. 
Ohne kompletten Sourcecode und Schaltplan kann hier aber kaum jemand 
helfen.

von holger (Gast)


Lesenswert?

>Der 1wire Bus ist auf Pin D6.

Auf welchem Port?

von Nabernd (Gast)


Lesenswert?

Versuch mal 10s Intervall. Wenn das geht, dann schrittweise verkleinern.

von Word (Gast)


Lesenswert?


von Karl H. (kbuchegg)


Lesenswert?

> Wenn ich die Routine ohne Timer1 aufrufe, ist alles bestens,
> das LCD stellt die Werte sauber dar. Benutze ich aber den
> Timer1 als Aufruf über Interrupt, hängt sich das LCD immer mehr auf.

Du gibst aber nicht zufällig das erhaltene Ergebnis innerhalb der ISR 
aus? Oder?

Wenn ja, dann hast du dein Problem gefunden. Wenn mehrere getrennte 
Code-Pfade mehr oder weniger gleichzeitig versuchen aufs LCD zu 
schreiben, dann ist Chaos vorprogrammiert.

von ... (Gast)


Lesenswert?

Hubert schrieb:
> Ich verwende KEINEN externen Quarz, der interne ist auf 8Mhz
> eingestellt.

Der ATmega16 hat gar keinen internen Quarz!

von Hubert (Gast)


Lesenswert?

Hallo und schonmal vielen Dank für die Infos!

@Karl Heinz:
Hmm, ich bin noch nicht so weit in der Thematik. Ich rufe mit:

Enable Interrupts
On Timer1 Papststeuerung Nosave
Enable Timer1

...am Anfang des Programmes meine Subroutine "Papststeuerung" auf, 
während im laufenden Programm alles weitere in "Do...Loop"-Schleifen 
abläuft.

Die Sub enthält folgenden Code:
'######################## Lüftersteuerung 
######################################
Papststeuerung:

If Portd.7 = 1 Then
 Locate 1 , 20 : Lcd Chr(7)
End If
 If Portd.7 = 0 Then
 Locate 1 , 20 : Lcd " "
End If

  1wreset
  1wwrite &HCC
  1wwrite &H44
  Waitus 250
  1wverify Dsid1(1)
  1wwrite &HBE
  Sc(1) = 1wread(9)
 If Sc(9) = Crc8(sc(1) , 8) Then
  Dg = Decigrades(sc(9))
  If Min1 > Dg Then Min1 = Dg
  If Max1 < Dg Then Max1 = Dg
  Temp_string1 = Str(dg)
  Temp_string1 = Format(temp_string1 , "0.0")

 End If

 If Auto = 1 Then
 If Dg => Hightemp Then Papst = 1
 If Dg <= Lowtemp Then Papst = 0
 End If

  1wverify Dsid2(1)
  1wwrite &HBE
  Sc(1) = 1wread(9)
  If Sc(9) = Crc8(sc(1) , 8) Then
  Dg = Decigrades(sc(9))
 If Min2 > Dg Then Min2 = Dg
  If Max2 < Dg Then Max2 = Dg
  Temp_string2 = Str(dg)
  Temp_string2 = Format(temp_string2 , "0.0")
 End If

 If Auto = 1 Then
 If Dg => Hightemp Then Papst = 1
 If Dg <= Lowtemp Then Papst = 0
 End If

Return

Viele Grüsse und DANKE! für die ganzen Tipps,
Hubert

von o\°|°/o (Gast)


Lesenswert?

... schrieb:
> Der ATmega16 hat gar keinen internen Quarz!

Rumms!!

von Hubert (Gast)


Lesenswert?

Hallo!

Ich habe jetzt sämtliche Möglichkeiten ausprobiert, und die beiden 
Locate-Befehle samt LCD-Befehlen aus der Routine rausgenommen- leider 
keine Besserung.

Woran könnte das liegen?
Selbst wenn ich in der Routine Zeile für Zeile auskommentiere- keine 
Besserung. Das ändert sich erst, wenn wirklich eine leere Routine 
aufgerufen wird?!

Kann es sein, dass der Timer einfach nicht mit 1wire parallel klar 
kommt?

Viele Grüsse,
Hubert

von mue-c (Gast)


Lesenswert?

Hubert schrieb:
> On Timer1 Papststeuerung Nosave

Du weißt schon, wofür das gut ist, oder etwa doch nicht?

von Hackes (Gast)


Lesenswert?

Hallo,

also spontan fällt mir kein Schnitzer in Deinem Programm auf. Aber ein 
paar Anregungen fallen mir vielleicht ein.

- was bedeutet das NOSAVE in der Timerdefinition? Den habe ich noch nie 
verwendet. Hatte das nicht was damit zu tun, daß nicht alle 
Registerinhalte gerettet werden?! Geht Dir da vielleicht was wichtiges 
verloren, was nach und nach zu Fehlern auf dem LCD führt??!

- bist Du Dir gaaaanz sicher, daß das Ausführen der Befehle in der ISR 
nicht länger dauert als das Timerintervall? Sieht zwar nicht so aus, 
aber... die Pferde vor der Apotheke?! ;-)

- ist es sehr unschön soviel in der ISR zu machen. Kannst Du testweise 
mal in der ISR nur einen Merker setzen und den im Hauptprogramm 
abfragen, ob er gesetzt wurde?! Ist er gesetzt, löschst Du ihn wieder 
und arbeitest für den Fall die Programmteile (die vorher IN der ISR 
waren) im Hauptprogramm ab.

Im Prinzip habe ich ein sehr ähnliches Programm wie Du geschrieben 
(damals) und da gab es keine Probleme mit ATmega16, Timer, LCD und 
DS1820.

Wünsche Dir viel Erfolg!

von Hackes (Gast)


Lesenswert?

Da war mue-c zeitgleich mit mir. ;-)

Sollte meine Vermutung richtig sein?! Habe das NOSAVE echt nur noch ganz 
grob im Kopf und kann gerade nicht nachsehen.

von Meiner Einer (Gast)


Lesenswert?

Ohne push und pop wird das wohl nix!

von Hubert (Gast)


Lesenswert?

Guten Morgen!

DAAANKE euch beiden für die wertvollen Tips!

Das "nosave" habe ich nur mal testhalber eingesetzt, weil es eben nicht 
alle Registerinhalte speichert, und somit weniger Platz benötigt.
Es macht allerdings keinen Unterschied, ob mit oder ohne diesen Befehl 
gearbeitet wird.

Das mit dem Merker werde ich heute nachmittag sofort antesten, es klingt 
ganz gut.
Suspekt ist das alles wirklich. Egal ob Breadboard mit lediglich Atm16 
und LCD oder Leiterplatte mit x-weiteren Beschaltungen und 
Entstörkondensatoren, Widerständen, OP-Amp, etc... - KEIN Unterschied.

Teilweise ist es nicht nur das LCD, welches zu spinnen beginnt, sondern 
auch der Prozessor selbst, weil ich nicht mehr in "standby" schalten 
kann. (Merkbar an einem nicht mehr abfallenden Relais)

@Meiner Einer:

push/pop? Also Assembler. Nein, mit SICHERHEIT nicht. Es mag schneller 
und platzsparender sein. Lernen wollen würde ich das nicht für viel 
Geld. ;)

Viele Grüsse,
Hubert

von Karl (Gast)


Lesenswert?

Es wurde ja schon angesprochen. In "Papststeuerung:" werden zu viele 
Befehle abgearbeitet. Noch dazu das langsame 1-Wire Protokoll. Das wird 
schon mal ein Grund für das "komische" Verhalten sein.

von Karl (Gast)


Lesenswert?

Ach, was es noch sein könnte. Oftmals vergessen Einsteiger die Stacks 
anzupassen. Erhöhe mal:

(code]$hwstack $swstack und $framesize[/code]

Oftmals sind dies zu niedrig und man erhält unerklärliche Phänomene.

von Hubert (Gast)


Lesenswert?

Hallo Karl und danke für deine Ausführungen!

Die Stacks hatte ich auch schon vergrößert- leider ohne Erfolg.

Deine Vermutung, dass im Unterprogramm "Papststeuerung" zuviele Befehle 
verarbeitet werden, scheint wohl die Lösung zu sein. (kann es gerade 
nicht testen)
Ich frage mich zwar, warum das so ist, weil die Zeit ja erheblich kürzer 
ist, als die Anzahl der Aufrufe dazwischen, aber evtl. mag das der 
Prozessor dennoch nicht?
Ich habe ja versuchsweise Stück für Stück von "Papststeuerung" 
auskommentiert und neu compiliert/geflasht- keine Besserung, auch nicht, 
als die komplette Maschinenroutine zum auslesen der Tempdaten 
auskommentiert war?

Beispiele mit VU-Metern, die einen Timer benutzen, funktionieren 
jedenfalls ohne weiteres- daher kann es nur am Timer und an der Art und 
Weise, wie mein Display am µC hängt, schonmal nicht liegen. (zum Glück, 
man muss es ja langsam eingrenzen)

Das einzige, was ich gestern noch getestet hatte, war das Einfügen von 
folgendem Code innerhalb meiner Do-Loop-Schleifen der einzelnen 
Unterprogramme:

Do

disable interrupts

Programmgedönse incl. locate x,x:lcd xxx, etc...

enable interrupts

loop until taster = 0

Dies brachte zwar den Effekt, dass der Timer (wenn auch logischerweise 
langsamer) seinen Interrupt aufrief, und sich das Display nicht mehr 
aufhängte, aber im Umkehrschluss natürlich alles so langsam wurde, dass 
man mittels Tastendruck rein GARNICHTS mehr erreichen konnte.

Gut, das war wohl auch nicht die feine Art des Programmierens, aber 
testhalber wollte ich es eben mal versuchen.

Viele Grüsse,
Hubert

von Karl (Gast)


Lesenswert?

Am besten wäre es, Du setzt nur eine Variable in der ISR. Beispielsweise 
so:
1
On Timer1 TimerISR
2
Enable Timer1
3
...
4
...
5
Do
6
.....
7
 If TimerVariable = 1 Then Call Papststeuerung
8
....
9
Loop
10
11
TimerISR:
12
 Toggle TimerVariable
13
Return
14
15
Papststeuerung:
16
...
17
(hier Dein Code)
18
...
19
 TimerVariable = 0
20
Return

von Hubert (Gast)


Lesenswert?

Hallo Karl!

Jepp, genauso werde ich es heute nachmittag versuchen!
Ich berichte dann erneut!

Vielen Dank!
Hubert

von Hackes (Gast)


Lesenswert?

Was Karl sagt, ist genau das, was ich mit dem Merker meine! Mach das 
mal!!

Was mich gerade SEHR stutzig macht:

Du sagst, wenn du in der ISR die Interrupts disablest (komisches 
Wort...), dann wird der Timer DEUTLICH langsamer, aber es klappt?! Gut 
klar, die 250ms fallen natürlich ins Gewicht!!! Ich habe langsam die 
Vermutung, daß die 1-Wire-Sequenzen und LCD-Routinen zu lange brauchen, 
um in der ISR abgearbeitet zu werden.

Mach das mal mit dem Merker. Wie gesagt, ich hatte damit keine Probleme 
und habe genau das gleiche gemacht!!

Viel Erfolg und berichte bitte mal.

Gruß Hackes

von Joe (Gast)


Lesenswert?

Drei mögliche Fehlerquellen.

Beim Sprung in einer ISR, auch Timer-ISR werden die register R12-R15 
nicht gesichert. Diese Register werden aber durch Single-Operationen 
verändert. Also in der Timer-ISR zuerst sichern. NOSAVE verhindert auch 
das Sichern alle anderen Register.
Besser noch die neuste Version von BASCOM 2074 verwenden. Dort gibt es 
SAVEALL, dabei werden alle Register gesichert.

Oder einfach:

$asm
Push R12     ' Register sichern, die nicht bei IRQ gesichert werden
Push R13     ' um eine Single-Rechnung in der Hauptschleife nicht
Push R14     ' während dieses IRQ zu stören.
Push R15
$end Asm
.
.
.
.

$asm
Pop R15     ' Register wieder herstellen
Pop R14
Pop R13
Pop R12
$end Asm


verwenden.

Störimpulse auf der Versorgungsspannung der LCD verursachen 
"chinesisches Zeichenwirrwar". Ein Kondensator, z.B. 1uF Tantal oder 
1uF-Elko + 100nF Keramik sorgen für Ruhe.

Der DS18xx benötigt nach dem Anstoßen der Messung eine interne 
Wandlungszeit von ca. 700ms (siehe Datenblatt). Erst dann kann auf die 
korrekten Werte zgegriffen werden.

Joe

von Hubert (Gast)


Lesenswert?

Hallo!

@Hackes:
jepp, dachte ich mir, dass du auf genau das hinaus wolltest!
So werde ich es auf alle Fälle versuchen! Danke nochmals! :)

@Joe:
Die Fehlerquelle Kondensator kann ich ausschließen. Im Laufe meiner mehr 
oder minder verzweifelten Tests habe ich an beiden Spannungsversorgungs 
des Atmega16 jeweils nen 100nF, am Display zwischen GND und VCC einen, 
und an der Buchse zu den DS18B20 auch noch einen. (nach und nach, haben 
aber leider keine Verbesserungen gebracht)

In meinem Wahn, endlich µC programmieren zu können, habe ich mir die 
neueste Bascom-Version gekauft, und bin eigentlich sehr zufrieden.
(gut, der Simulator funzt- egal, was man einstellt- nicht mit dem LCD, 
aber da solls wohl Probleme geben)

saveall werde ich somit auf jeden fall testen!

es mag evtl. eine etwas suspekte Frage für einen Profi sein, aber: Wo 
müsste ich deine Assemblerroutine einbinden im Programm?

Viele Grüsse und Danke,
Hubert

von Hubert (Gast)


Lesenswert?

Hallo!

LEUTE, EURE TIPPS WAREN GOLD WERT!
jetzt läuft der Timer-Aufruf absolut reibungslos.
ich habe es mittels einer Sub und einer Variable realisiert- genau, wie 
es mir von euch vorgeschlagen wurde! :)

perfekt!

jetzt muss ich nur noch dafür sorgen, dass sich das Mistding nicht 
aufhängt, wenn ich die Endstufe aus/einschalte. Das wird auch noch 
spannend, aber zumindest Programmtechnisch ist jetzt ein GROßER 
Fortschritt passiert!

Was noch ansteht:

- messen von 590mV über einen Widerstand von 0,47 Ohm, und das leider 
nicht nur einmal, sondern auf der Verstärkerplatine 2x, wobei davon 
einmal +24V, und einmal -24V als Bezugsebene dienen müssen.
Ich hab dazu auch schon viele Tipps bekommen, aber der Erfolg hat sich 
leider noch nicht eingestellt, und mit Operationsverstärkern kenne ich 
mich nicht gut genug aus, obwohl ich das Zeug vor Jaaahren mal gelernt 
habe und in der Industrieautomation tätig bin.
Schande über mich- aber was mich tröstet: Sogar unsere hauseigenen 
Hardwareentwickler für SPS-Baugruppen beißen sich bislang die Zähne 
daran aus... :)

Hat dazu jemand Tips?
Schaltplan der Endstufe wäre dieser hier:

http://www.firstwatt.com/pdf/prod_f5_man.pdf

Dort aus Seite 12 möchte ich die 0,6V über R11 und R12 messen...
DAS scheint noch was längeres zu werden.

Viele Grüsse und wie immer vielen Dank- echt spitze, wie einem hier 
geholfen wird! :)
Hubert

von Hackes (Gast)


Lesenswert?

Hallo Hubert,

na Glückwunsch und Prima, daß es nun funktioniert!

Bezüglich den Jaaaahren, OPs und Automatisierung (jedoch auf DDC-Ebene 
statt SPS) haben wir wohl eine ähnliche Laufbahn gehabt, lach.

Was das Messen in DEINEM Fall angeht, kann ich nicht wirklich viel 
sagen. Ich denke da hörst Du mal besser auf die richtigen Profis hier. 
Aber hat der Mega16 nicht auch einen differenziellen Eingang?! Würde es 
gehen, den Analog-GND auf -24V zu legen und mit einem analogen Eingang 
die Spannung über R12 zu messen und differenziell über R11 zu messen?!

Ich habe aber keine Ahnung, ob die hohe Spannungsdifferenz ein Problem 
wäre. Habe mich mit den differenziellen Eingängen noch nicht 
beschäftigt. Wart mal ab, was die Profis sagen.

@Joe:

Das mit den Registern R12-R15 kannte ich auch noch nicht! Sollte ich mal 
im Hinterkopf halten. WOHER weiß man sowas???? Jetzt grübel ich aber, 
daß ich mit Sicherheit auch schonmal eine Single-Operation in einer ISR 
gemacht habe und keine Probleme hatte. Oder war das einfach Glück??! ;-)

Gruß Hackes

von Hubert (Gast)


Lesenswert?

Hi Hackes!

Das mit dem differenziellen Eingang habe ich mir auch schon angesehen. 
Problem ist in jedem Fall, dass alles auf Masse bezogen ist.
Ich bräuchte eine komplett Potenzialfreie Messung, damit sollte es die 
wenigsten Probleme geben.

AAAABER mein Hauptproblem des aufhängenden Displays besteht weiterhin. 
Ich habe heute 4 Stunden lang versucht, der Sache auf den Grund zu 
gehen, weshalb sich mein Display aufhängt, wenn ich den Verstärker 
an/ausschalte.

Einige absolut suspekten Kenntnisse habe ich gesammelt:

- Das Gehäuse des Verstärkers besteht aus 10mm starken Aluminiumplatten 
(jaaa, etwas übertrieben, ich weiss ;)). Die Frontplatte (beide 
Monoendstufen sind als 45cm hohe Türme ausgelegt) wurde für das Display 
innen so ausgefräst, dass dies nach aussen hin annähernd bündig mit der 
Front abschließt.
- Schraube ich die Frontplatte vom Rest des Amps ab, so hängt sich nix 
auf
- Berühre ich mit der Frontplatte den Rest des Amps auch nur an einem 
klitzekleinen Teil, und schalte dann aus/ein: Display hängt sich auf.
- Das ganze passiert nur, wenn ich über den Anschluss meiner 
OpAmp-Schaltung für das VU-Meter die Masse des Verstärkers mit der der 
Mikrocontrollerplatine zusammenführe.

Jetzt kommt aber das definitiv Verwirrenste:
WARUM um alles in der Welt hängt sich das Display NUR dann auf, wenn es 
in der Frontplatte sitzt und diese wiederrum den Rest des 
Verstärkergehäuses berührt?!?
Denn eines kann ich nach zig Messungen und optischen Prüfungen absolut 
ausschließen: Display und Front haben ABSOLUT keinen einzigen 
Berührungspunkt. Diverse Messungen haben dies belegt.

Schließe ich ein anderes Display an -> genau die gleiche 
Verhaltensweise. Jedesmal, wenn das LCD in der Alufront angebracht ist 
(4x verschraubt, keine Berührungspunkte auf Masse/VCC und sonstige 
Leitungen, garantiert!) und die Front wiederrum das Gehäuse berührt, und 
man aus/einschaltet -> Zeichenwirrwarr.

Ich dreh echt bald ab. Woran kann das nun wieder liegen?

Viele Grüsse,
Hubert

von Hubert (Gast)


Angehängte Dateien:

Lesenswert?

Zur Veranschaulichung noch 2 Bilder. Leider noch ohne die Taster, diese 
Sind mittlererweile eingebaut, und natürlich sind auch alle 
Imbusschrauben korrekt installiert ;)
Das Foto mit dem Display zeigt die Temperaturmessung beider Mosfets 
eines Monoblocks. Das klappt alles ganz prima... Wenn da nicht diese 
doofen Aufhänger wären, wenn man das Teil einfach nur in Standby 
schickt. :(

Viele Grüsse,
Hubert

von Hackes (Gast)


Lesenswert?

Hallo Hubert,

10mm??? Aaaaaaaalter Schwede!!!! Überlebt auf jeden Fall den 3. 
Weltkrieg, was? ;-)

Aber gefällt mir. Ideen hätte ich da auch genaug, aber leider fehlen mir 
die passenden Maschinen auf der Arbeit.

Die differentiellen Eingänge beziehen sich jeweils auch auf GND?? Okeee, 
hätte ich mir was anderes drunter vorgestellt. Aber wie gesagt, noch 
nicht mit gearbeitet.

Was da bei Dir so passiert ist ja mal echt seltsam. Und 1000%-ig sicher, 
daß keine elektrische Verbindung zwischen Display und Frontplatte 
besteht??!!!

Wenn ich es richtig verstehe...

- Display ist in der Frontplatte verschraubt
- Frontplatte ist nicht am Amp-Gehäuse angeschraubt
---> keine Probleme

Auch wenn die Frontplatte gaaaanz dicht vor dem Amp-Gehäuse steht???

Erst wenn du eine elektrische Verbindung zwischen Front und Gehäuse 
herstellst kommen die Probleme?!

Klingt für mich, sorry, doch danach, daß das LCD irgendeine Verbindung 
zur Frontplatte eingeht. An Indunktion und Einstreuung mag ich nicht so 
ganz glauben, denn die wäre auch da, wenn die Frontplatte ganz nah am 
Gehäuse stehen würde! Kannst Du das LCD mal mit Kunststiffschrauben und 
irgendwie mit Papier GARANTIERT isoliert einsetzen?! Oder irgendwie mit 
"Siemens-Lufthaken" hinter dem Frontplattenausschnitt positionieren und 
alles zusammenschrauben. Würde mich interessieren, was dann passiert.

"Das ganze passiert nur, wenn ich über den Anschluss meiner
OpAmp-Schaltung für das VU-Meter die Masse des Verstärkers mit der der
Mikrocontrollerplatine zusammenführe."

Den Satz verstehe ich nicht sooo ganz. Welcher OP und VU-Meter? Son 
bischen Schaltplan wäre jetzt mal ganz hilfreich!!!! Welche Spannungen, 
Komponenten hast Du. WELCHE Massen sind wie verbunden? Meine Glaskugel 
ist gerade in der 1000-jährigen Inspektion! ;-) Ne im Ernst, man muß mal 
wenigstens nen Schema sehen, was wo verbunden ist.

Auch wenns Off-Topic ist. Dein Projekt interessiert mich. Werde mir das 
PDF mal speichern. Wie klingt denn der Amp und wie problematisch war der 
Aufbau. Würde mich über paar Bilder freuen. Zeig mal! ;-)

Gruß Hackes

von Peter D. (peda)


Lesenswert?

LCDs haben oftmals einen Metallrahmen.
Wenn er es nicht schon ist, sollte er mit CPU-GND verbunden werden.
Und er darf keinen Kontakt zur Frontplatte haben!


Peter

von Hackes (Gast)


Lesenswert?

Hallo Peter,

an den Rahmen hab ich auch schon gedacht. Aber wenn ich ihn richtig 
verstehe, dann hat auch der keinen Kontakt zur Frontplatte. Aber sollte 
er nochmal prüfen.

von M. P. (firstwatt)


Lesenswert?

Hallo!

Nachdem ich mich hier anmelden musste, jetzt unter dem Namen Firstwatt 
zu finden... ;)

@Hackes: Jepp, 10mm sind echt etwas dick. Aber ich wollte einfach was 
für die Ewigkeit bauen. Seit September '11 sitz ich an den Dingern.
Die Rückwand ist zugleich Kühlkörper und beinhaltet Chinch-Eingang und 
LS-Ausgang, sowie Netzschalter und -buchse.

Fotos von Innen gibts erst, wenn ich etwas Ordnung drin hab- aktuell 
gefällts mir noch nicht...

Klanglich habe ich wirklich seltenst etwas besseres hören dürfen. Durch 
den simplen Aufbau OHNE einen einzigen Kondensator im Verstärker (siehe 
PDF) wird auch nichts vom Signal verfälscht.
Systembedingt ist es (je nach ohmscher Belastung) ein Class A Aufbau, 
das heisst, man hat hohe Verlustleistung, aber eben auch eine richtig 
geniale Hochtonauflösung. (und ich bin kein Mensch, der auf irgendeinen 
Voodoo oder sonstigen Hifi-Hokuspokus eingehen würde!)

Als Trafo verrichtet ein 300VA Aparillo mit 2x18V sekundär seinen 
Dienst.
Gleichgerichtet und mittels 28x4700µF Kondensatoren geglättet geht der 
Saft in den Verstärker.
Platinen dafür kann man aufgrund des simplen Aufbaus entweder selbst 
basteln, oder aber (so habs ich gemacht) für ne schmale Mark auf 
www.diyaudio.com bestellen.

genauer link:
http://www.diyaudio.com/store/europe/

Das schöne ist auch irgendwo der Selbstbaugedanke. Kaufen kann jeder...

Zu meinem Problem mit dem LCD:
Gestern konnte ich nicht weiter kucken, aber heute werde ich auf alle 
Fälle nochmals überprüfen, ob auch der Displayrahmen KEINEN Kontakt zum 
Alu hat. Ich bin mir da aber ziemlich sicher. Das ist zwar das einzige 
Bauteil am kompletten LCD, welches ich nicht gegen die Alufront gemessen 
hatte, aber der Rahmen an sich ist auf der Leiterplatte widerrum auf 
Masse gelegt.

Kann ich, um Störungen zu minimieren, die Datenleitungen irgendwie 
niederohmiger und somit stabiler gegen äussere Einflüsse machen?
(So in der Art Pulldown/up)
Eventuell liegts ja MIT daran, dass die Flachbandleitung 25cm lang ist 
und man sich damit ein paar Interferenzen einfängt?
Bringt ein Ferritkern um die Flachbandleitung evtl. Besserung?
Herrje, wenn man wenigstens einen Ansatzpunkt hätte...

@Peter:
Hmm, über die Displayleiterplatte sollte ich eigentlich auf CPU-GND 
hängen.
Ich kann allerdings separat noch eine Masseleitung von der µC-Platine 
zum Displayrahmen legen, das werde ich auf alle Fälle versuchen!

Viele Grüsse und wie immer DANKE euch!
Hubert

edit zum Thema Schaltplan:

Es gibt leider noch keinen. Meine µC-Platine hängt zB. am Laptop 
(potenzialfrei vom Verstärker) und im Moment des Zuschaltens vom 
Verstärker kommen beide GND-Potentiale zusammen. (also die des 
Verstärkers mit der der µC-Platine)
Masse ist aber nicht geschalten. Der Ringkerntrafo des Verstärkers hängt 
an L1 und N (logisch), ich schalte einpolig an/aus.
Der µC bekommt seinen Saft entweder über den ISP-Programmer vom Laptop, 
oder per Labornetzgerät und Spannungsregler. Immer das gleiche Resultat- 
Display hängt im Falle des Ausschaltens des Verstärkers.
Auch beim Einschalten kommen Aufhänger vor, jedoch nicht so häufig, wie 
beim Ausschalten.
Was noch wichtig ist: PE ist am Alugehäuse angeschlossen (logisch) und 
wird (noch logischer!) auch nicht geschalten.
Die gleichgerichteten 18V des Trafos haben auf der GND-Seite über einen 
NTC in Reihe eine Verbindung zum Alugehäuse- um Brummfrequenzen zu 
unterdrücken.

von Hackes (Gast)


Lesenswert?

Hey Hubert,

bin leider was im Stress und wenig Zeit zum Schreiben. Wenn wieder etwas 
mehr Zeit da ist, nächste Woche, dann werd ich Dich sicher mal 
kontaktieren zu Deinem Amp, wenn ich darf. Die Seite von Firstwatt und 
Unterseiten habe ich schon gelesen (so einiges zumindest). SEHR 
interessant. Wäre mal was für den Winter. Zu dem Selbstbaugedanken 
erhälst Du meine VOLLE Zustimmung.

Grundsätzlich solltest Du die LCD-Leitungen schon "kurz" halten, sind 
immerhin Daten. Beim Basteln hatte ich auch schon lange 
Flachbandleitungen ohne Probleme genommen und ging. ABER in Deiner 
Umgebung in dem Amp und den Leistungen würde ich da mal keine Hand mehr 
ins Feuer legen!!!

Du betreibst also µC-Platine zur Zeit galvanisch getrennt, schonmal gut! 
Labornetzteil wäre in meinen AUgen ja erstmal perfekt!

Bin gespannt was passiert, wenn die Frontplatte nur ganz dicht am 
Gehäuse steht, aber noch keinen Kontakt bekommt. Aber warte erstmal 
Deine Ergebnisse ab.

Mit den Ferritkernen habe ich keine Erfahrung! :-(

Wäre abgeschirmte Leitung möglich? Schirm auf GND legen. Vielleicht mal 
Aluminiumfolie ums Flachbandkabel wickeln zum Testen. Wobei "Eisen" wohl 
besser wäre als Aluminium, aber ja nicht so möglich.

Du könntest vielleicht das LCD in regelmäßigen Abständen neu 
initialisieren lassen. Aber das wäre ne Fuschlösung. ;-)

Pullup und Downs werden nicht zielführend sein. Ich habe aber mal von 
100-Ohm-Widerständen in den Datenleitungen gelesen. Ob das was bringt... 
ich habs nie versucht, da kein Bedarf bestand.

Viel Erfolg und Gruß,

Hackes

von M. P. (firstwatt)


Lesenswert?

Hallo Hackes,

wirst lachen, das mit der Alufolie hab ich wirklich versucht- leider 
ohne Erfolg.

Ich konnte aber weitere Erkenntnisse sammeln:

- Eine Berührung des LCD zur Frontplatte kann ich tatsächlich 
ausschließen- auch zum Displayrahmen.-. Die 4 nicht belegten Datenpins 
habe ich alle auf Masse gelegt- kein Erfolg
- Alufolie ums Flachbandkabel- kein Erfolg
- Die Front braucht tatsächlich KEINE Verbindung zum Rest des 
Verstärkergehäuses, es reicht, wenn alles seeehr nah dran ist. Ganz 
schlimm wirds, wenn die µC-Platine auch noch im Inneren des Verstärkers 
liegt. (dann wird das Display pauschal schwarz g)
- Minimal besser wirds, wenn man die Masseverbindung fürs VU-Meter 
trennt, aber es ist nicht weg, somit scheint das nicht primär ursächlich 
zu sein.

Alles in allem werde ich jetzt folgendes angehen:

- Die Flachbandleitungen des Displays durch Stiftleisten/Buchsenleisten 
ersetzen und den µC somit direkt unter das Display basteln.
- Die Leitungen zu den Tempsensoren von denen des Chinch-Audio-Signals 
trennen und zudem noch schirmen (evtl. einfach ne Lan-Leitung verwenden)

Langsam verzweifle ich wirklich...

Zum Thema Verstärker generell: Klaro kannst mich nerven! Es ist fürn 
Winter wirklich ein schöööönes Hobby!

Viele Grüsse,
Hubert

von Hackes (Gast)


Lesenswert?

Hallo Hubert.

Aber sicher werde ich Dich nerven! ;-) Ich hoffe nur ab dem Winter 
endlich wieder mehr Zeit fürs Hobby zu haben.

Ok, daß mit der Frontplatte gaaaanz nah dran hab ich vermutet, auch wenn 
ich da keine direkte Erklärung für habe. Ich wollte nur die Bestätigung, 
daß keine elektrischer Kontakt da sein muß.

Hmmmm... mysterious...

Von den nicht benutzten Datenleitungen auf GND bin ich natürlich 
ausgegangen.

WIE ist das mit dem VU-Meter zu verstehen???? Das verstehe ich noch 
nicht so ganz.

Nur mal ne Idee: Wo du gerade von den Temperaturleitungen sprichst, kam 
es mir so. Lass die Leitungen zu den DS1820 mal bitte ganz von der 
Platine ab. Vielleicht fängst Du da die Störungen ein?!

Wo ich mal blöde Effekte hatte: Ich hatte 7-Segmentanzeigen an einem 
Port und die gemultiplext. Ich sag mal Port B. Dort waren die drei 
Transistoren für die Segment-Transistoren. Auf meinem Versuchsboard war 
der DS1820 an einem anderen Port C. Auf der fertigen Platine habe ich 
dann den DS1820 mit auf den Port B gelegt, weils vom Layout praktischer 
war. Und dann spielten die Segmentanzeigen verrückt, weil der 1-Wire mit 
auf ihrem Port lag. Die Ursache habe ich nie ergründen können. Aber habe 
den DS1820 dann auf nen anderen Port gelegt und Ruhe war.

Man soll sich ja an den letzten Strohalm klammern, wenn man nicht gerade 
der Dipl.Ing. ist. Habe zwar Elektroniker gelernt, aber bin eben mehr in 
der Gebäudeleittechnik, BUS-Systemen und Prozessleitelektronik zuhause.

Gruß Hackes

von Hubert (Gast)


Lesenswert?

Hi Hackes!

Gestern und heute konnte ich weitere Erkenntnisse sammeln:

- auch das andere Display, bei dem die Flachbandleitung wirklich NUR für 
selbiges verwendet wird, und nicht wie beim andern noch die Spannung und 
das Signal für die beiden Taster mitführt, hängt sich genauso auf.

- stecke ich die Temperatursensoren ab (da hängt auch das Chinch-Signal 
des Verstärkers für das VU Meter drauf) --> dito Aufhänger.

- kurzum: es reicht absolut, wenn das Display in der Alufront sitzt, und 
diese wiederum seeehr nahe am Rest des Verstärkergehäuses.

Kann man das LCD wirklich irgendwie minimal zeitversetzt resetten?
Das wäre die einzige Lösung, die mir dazu einfällt, ohne eine Front aus 
Kunststoff einsetzen zu müssen- das würde ich um jeden Preis vermeiden 
wollen.

Viele Grüsse,
Hubert

von Weingut P. (weinbauer)


Lesenswert?

Öhm ... mal ne doofe Frage ...

Auf welchem Potential liegt denn Dein Gehäuse?
Wenn ich das richtig gelesen habe nimmst Du das Gehäuse als Kühlkörper 
für die FET, hast Du die auch elektrisch gegens Gehäuse entkoppelt 
(Glimmerscheibe u. Kustoffschraube) oder direkt aufgeschraubt?

Laut Datenblatt ist die Rückseite des IRFP9240, der in Deinem PDF 
aufgeführt ist, mit Drain verbunden.

von Hubert (Gast)


Lesenswert?

Hallo Weinbauer!

Das Alugehäuse ist auf PE, also Erde gelegt.
Beide Mosfets sind natürlich mit Glimmerscheiben elektrisch vom Gehäuse 
entkoppelt.

Langsam tendiere ich dazu, irgendwie das Display zu resetten.
Ich weiß nur noch nicht, wie das in Bascom zu machen ist?

Aktuell google ich dazu wie ein Verwirrter, habe aber noch keinen 
wirklichen Erfolg zu vermelden.

Versuche, den Ringkerntrafo zu schirmen, schlugen bislang auch fehl- 
wenn es denn überhaupt der Trafo ist, der für diesen Displayeffekt 
sorgt?

Vielleicht hat ja noch jemand Tips?

Viele Grüsse,
Hubert

von Hackes (Gast)


Lesenswert?

Hallo Hubert,

ohne es jetzt gerade ausprobieren zu können:

INITLCD
CLS

Durch das initialisieren sollte das Display wieder gehen.

Ich hab da aber noch ne ganz blöde Frage. Du schreibst, wenn Du den 
Verstärker AUSschaltest, dann hängt sich das LCD auf. Ööööhm, warum soll 
das LCD eigentlich noch an sein, wenn der AMP aus ist?!

Gruß Hackes

von Hubert (Gast)


Angehängte Dateien:

Lesenswert?

Hey Hackes!

DANKE für deinen Code, leider geht mit Initlcd garnix mehr, wenn ich den 
Befehl irgendwo im Listing unterbringe- kein Witz?! Ich verstehs zwar 
grad selbst nicht, aber es ist so...
Wenn ich in meiner Standby-Sub am Anfang INITLCD stehen habe, bleibt das 
Display sogar aus, wenn ich in der Sub noch kein einziges mal war? :(
Anscheinend arbeitet Bascom nicht jeden Befehl hintereinander ab...

Das mit dem "Standby" ist eigentlich nur ein "Designgimmick": Der 
Hauptschalter des Amps sitzt auf der Rückseite. Somit kommt man nicht 
wirklich gut ran.
Konzeptioniert war das Ganze damals natürlich OHNE µC- dieses Vorhaben 
hat sich erst danach ergeben, weil die Frontplatte irgendwie so nackt 
aussah, und ich ohnehin in diese Thematik wenigstens ein klein wenig 
meinen Fuss setzen wollte.

Verwendet werden die beiden Verstärker an einer schaltbaren Steckdose- 
somit verwende ich den Hauptschalter an den Dingern ohnehin nicht 
wirklich.
Leider ist es durch den hohen Einschaltstrom der beiden Ringkerntrafos 
schon öfter dazu gekommen, dass es mir im Wohnzimmer die 16A-Sicherung 
rausgehauen hat.
Daraus entstand die Idee, den µC nicht nur zum messen von diversen 
Werten zu benutzen, sondern auch gleich für eine Standby-Schaltung. Und 
diese sieht bei mir aus optischen Gründen vor, dass im Display 
"Firstwatt F5 -standby-" stehen soll, wenn das Teil aus ist. (Und die 
Ringbeleuchtung beider Taster an ist)

Ach bevor ich hier ohne Ende labere, mach ich doch gleich ein Bild und 
füge es mit ein...

Hilfe, langsam weiss ich echt nimmer weiter... :((

Viele Grüsse,
Hubert

von Hubert (Gast)


Lesenswert?

Burschen, ich HABS! :)

INITLCD funzt schon, allerdings muss man etwas mehr einfügen:

Config Lcd = 20 * 4
Initlcd
Cursor Off Noblink
Waitms 250

HERRLICH! An sich ist sowas nicht die feine Art, das ist mir auch 
klar... aber gut, mit Bascom verschwendet man ja auch Speicherkapazität 
ohne Ende.(bin jetzt bei gut 11k Code, und habe meiner Ansicht nach 
nicht die Welt programmiert...)

Jedesmal, wenn sich das LCD nun aufhängt (man kann es die 250ms bisschen 
erkennen), wird es artig resettet und gibt Ruhe. :)

Eins steht jetzt noch an, dann sollte ich soweit sein, eine Platine zu 
designen: ich muss die 590mV durch R11/R12 messen können...
Dazu habe ich selbst nach vielen Versuchen mit OP-Amps noch keinen 
Erfolg verbuchen können- leider.

Viele Grüsse und immer her mit den Tips (es ist wirklich klasse hier!)
Hubert

von spess53 (Gast)


Lesenswert?

Hi

>Burschen, ich HABS! :)

>INITLCD funzt schon, allerdings muss man etwas mehr einfügen:

>Config Lcd = 20 * 4
>Initlcd
>Cursor Off Noblink
>Waitms 250

Nein hast du nicht. Damit kaschierst nur dein Problem, aber löst es 
nicht. Ein LCD das nach der Erstinitialisierung noch mal Initialisiert 
werden muss funktioniert nicht richtig.

MfG Spess

von Hubert (Gast)


Lesenswert?

...Spess, da ich es nicht für kommerzielle Zwecke nutze, kann (muss?) 
ich durchaus mit diesem "Problem" leben.

Anscheinend begünstigt mein Gehäuse eben diese Art von Interferenzen.

Was sollte ich- deiner Meinung nach- noch versuchen, um das LCD zu 
entstören?
Eventuell hast du ja eine zündende Idee dazu?

Grüße,
Hubert

von Hackes (Gast)


Lesenswert?

GLÜCKWUNSCH Hubert!! :-D

Ich hab mich gestern schon gewundert, weil ich in meinen Programmen auch 
ein INITLCD verwende (zumindest am Anfang!).

Also Bascom arbeitet übrigens schon Schritt für Schritt der Reihe nach, 
mach Dir da keine Gedanken.

Warum wartest Du eigentlich 250ms nach dem Init? Ist jetzt was schwer zu 
beurteilen, wenn man Dein Programm nicht sieht!!

Hmmm... Du bekommst doch mit, wenn der Amp ausgeschaltet wird, oder? 
Wenn ich richtig verstanden habe, dann machst Du das doch über den µC!? 
Wenn sich das LCD nur dann aufhängt, dann mach doch das Init nur dann. 
Wie wäre es damit?

Zum Speicherverbrauch: Naja, 11% erreichst Du relativ schnell. Schon 
allein wenn der ganze "Rumpf" der Deklarationen kompiliert wurde, hast 
schnell ein paar Prozent. Ich vermute, daß Du ein paar Berechnungen mit 
Fließkommavariablen machst, daß braucht relativ viel Speicher. Mach Dir 
aber keinen Kopf, wenn jetzt nur noch Logik und "Schönmachsachen" 
dazukommen, dann hast noch Speicher genug!

Tjaaa... zu den OP-Amps. Was hast denn schon so versucht? Was hast Du 
für Vorraussetzungen? Positive und negative Spannungsversorgung 
vorhanden? Gibts keine ICs, die eine DC-Spannung galvanisch trennen?

Gruß Hackes

von Peter D. (peda)


Lesenswert?

Du hast irgendein Problem mit der GND-Verdrahtung und/oder 
Stromversorgung.

Digital und analog zusammen in einem Gerät ist nicht ganz einfach. An 
einer Stelle müssen beide GND verbunden sein. Und es darf keine 
Erdschleife geben, durch die beide Ströme fließen.
Es dürfen auch nirgends analoge und digitale Leitungen unabgeschirmt 
nebeneinander liegen.

Alle Leitungen zum LCD sollten in einem Schirmgeflecht liegen. Oder am 
besten gleich den MC direkt hinter das LCD. Oder ein 2. MC, der das LCD 
ansteuert und vom Master seriell den Text erhält.
Optokoppler können auch helfen.


Peter

von Weingut P. (weinbauer)


Lesenswert?

wenns mit den Codeergänzugen geht tippe ich auf Bugs auf der Seite des 
Codes ... zeig doch mal Dein Listing, evtl. findet sich da noch 
Optimierungsbedarf.

von Weingut P. (weinbauer)


Lesenswert?

Mitunter braucht man garkeine OpAmp-Schaltung, die Atmels haben auch 
differentielle Eingänge mit Gain, die sich für solche Geschichten 
eignen.

Hubert schrieb:
> Das Alugehäuse ist auf PE, also Erde gelegt.
> Beide Mosfets sind natürlich mit Glimmerscheiben elektrisch vom Gehäuse
> entkoppelt.

und auch an die Schrauben gedacht?

von M. P. (firstwatt)


Lesenswert?

Hallo Jungs!

@Hackes:

Danke nochmal für den Tip!
Ich initialisiere das LCD ja auch nur in meiner Subroutine "standby", 
also immer dann, wenn ich über meine Relaisplatine den Ringkerntrafo 
aus/einschalte. Sonst nicht... Wenn ich jedoch INITLCD in dieser Sub 
ohne weitere Befehle ausführen lasse, zeigt das LCD von Anfang an nichts 
an, obwohl ich TODSICHER noch nicht in dieser Sub war. Daher meine 
Vermutung, dass es Befehle gibt, die nicht seriell abgearbeitet 
werden...
Wenn man ihm dann aber noch sagt, was er für ein Display dranhängen hat, 
dann läuft alles tiptop.

Klar, eine saubere Lösung sieht irgendwo anders aus- aber nach diversen 
Versuchen wusste ich langsam wirklich nimmer weiter. Erstmal kann ich 
auf alle Fälle damit leben, man merkt es ja nicht wirklich... (mich 
nervt nur, dass ich es weiss ;))
Fraglich ist, wie lange das Display solche Spielchen verträgt. (ich 
meine nicht das initialisieren, denn das wird dem Ding egal sein, 
sondern eher diese EMV?-Einflüsse jedesmal ;))
Die Wartezeit nehme ich etwas zurück, dass sollte klappen.

Zum Speicherverbrauch: Leider nicht 11%, sondern 11k, also in etwa 70% 
des Speichers sind bereits belegt- das ginge mit C oder ASM mit 
Sicherheit besser, würde mich aber in die Klappse bringen. Daher Bascom. 
Einfach, Durchschaubar und von früher noch als Sprache halbwegs bekannt.
Gut, ich habe 5 Untermenüs, und in zweien davon kann man noch diverse 
Einstellungen vornehmen. Dann sichere ich Werte ins Eprom weg, lese 
diverse Analog- und Digitalwerte ein, etc... Das läppert sich trotzdem.

Zum Thema 600mV messen: Tja, da gibts unendliche Lösungsansätze, aber 
keine für mich wirklich Berechenbaren (ich habe weder Elektrotechnik 
studiert, noch täglich damit zu tun, und war in Mathe/Physik wirklich 
immer gaaanz weit hinten im Ranking ;))

Es gibt von Maxim irgendwelche IC's für die Überwachung von Akkus, aber 
das Blick ich auch nicht wirklich... Bin aber sehr gewillt, was zu 
lernen.
Wo ich auch noch hänge, ist die Tatsache, dass ich ja einmal +24V und 
-24V im Verstärker habe, die ich gegen Masse über diese beiden R messen 
müsste... :(
Zu diesem Thema suche ich händeringend eine Schaltung, die ich einfach 
nachbauen und entsprechend abändern kann. Andererseits kann ich auch 
verstehen, dass mir das niemand ohne weiteres vorkauen wird...

@Peter:

Jepp, irgendwie ist es zumindest zu einem großen Teil ein GND-Problem.
Meine letzten Versuche zeigten aber auch, dass selbst OHNE leitender 
Verbindung beider GND-Potentiale Störungen am LCD auftraten.
Daher gehe ich auch von anderen Einflüssen aus...
Deine Idee mit dem LCD direkt an der µC-Platine werde ich auf alle Fälle 
machen. Über eine Stiftleiste ist das schnell und sauber erledigt, und 
Platz für die Platine ist unter dem LCD locker noch vorhanden. (und es 
ist gleich alles viel kompakter und aufgeräumter)

Ein LCD mit zwei Controllern anzusteuern wäre auch eine geniale 
Herausforderung, selbst wenn ich sie in Bascom meistern müsste.
Daher: Ich denke, auf einem Breadboard übe ich das mal! :)

@Weinbauer:
Klaro, die Schrauben sind zwar aus Metall, der Mosfet ist jedoch 
bauartbedingt an dieser Stelle nicht leitend, daher kein Problem (habs 
gemessen).
Die differentiellen Eingänge wären eine Idee, das Problem ist die hohe 
Spannung (24V) und vor allem die negativen 24V...
Das Blicke ich einfach noch nicht... :(

Bugs im Listing schließe ich eigentlich aus, da es wirklich vom 
Verstärker-zuschalten abhängt. Mein Programm ist mit Sicherheit 
hochgradig optimierungsbedürftig, da ich das letzte mal 1996 
programmiert habe, aber gut- mit eurer Hilfe hier wird das täglich 
besser! :)

Leider habe ich es gerade nicht hier, da ich in der Arbeit bin. :(


Viele Grüsse,
Hubert

von Hackes (Gast)


Lesenswert?

Hallo Hubert,

also auch bei den 11KB mach Dir mal keine Sorgen. Klingt für mich nach 
nem Mega16 und wenn der Platz eng wird, dann kannst Du den einfach durch 
nen Mega32 ersetzen. Mußte ich auch schonmal.

Auch wenn BASCOM sehr verschriehen ist (jeder hat halt seinen 
subjektiven Liebling), kannst Du damit auch große Projekte anständig und 
stabil programmieren. Sauberes Programmieren ist natürlich Pflicht, aber 
das nimmt jede andere Programmeirsprache genauso übel. Ich bin 
sicherlich kein AVR und BASCOM Profi (bei weitem nicht), aber habe schon 
ein paar mittelgroße und auch große Projekte damit programmiert. In 
einem arbeiten LCD, UART, I2C, ADC, PWM und Timer friedlich zusammen und 
auch mit BASCOM läuft es stabil und zuverlässig. Mit C hätte es 
vielleicht 10% weniger Platz gebraucht, aber er reicht doch und flott 
ohne Ende! ;-)

Daß Du Dir Wissen aneignest und selber denkst, versuchst und probierst, 
sollte wohl jedem hier schon aufgefallen sein. Von daher wird Dir sicher 
Hilfe angeboten werden. Ich bin dabei! ;-)

Was hast denn von Maxim gefunden? Zeig doch mal und man kann sich mal 
Gedanken machen. Die differentiellen Eingänge hatte ich ja auch in den 
Sinn gefasst, aber ich vermute, daß das ABSOLUTE Potential zum GND von 
+-24V Probleme macht. Ich weiß es aber nicht, nur vermutet.

Gruß Hackes

von M. P. (firstwatt)


Lesenswert?

Hallo Hackes!

Jepp, genau beim absoluten Potential liegt mein Problem.
Das banale ist ja gerade: Hält man ein 3,95€ Multimeter an R11 oder R12, 
zeigt es einfach ganz brav die 0,6V an.
Daher müsste man meinen, mit einem µC kann das doch nicht derart komplex 
werden, dass man daraus fast ne Doktorarbeit schreiben könnte?

Möchte ich diese Spannung mittels µC messen, muss ich das ja irgendwie 
gegen GND tun. Und hätte somit einmal 24V, und einmal 23,4V anliegen...
(+ Auf der negativen Seite eben negiert)
Der differenzielle Eingang bezieht sich doch auch auf GND, richtig? Das 
heißt, hier würde Rauch aufsteigen.

Von Maxim gibts zB. den MAX4070, der soll sowas wohl können. (ob er das 
sicher tut, konnte mir hier in der Firma auch niemand sagen...)
Aber wie der anzuschalten ist in genau meinem Fall- keine Ahnung.

Ausserdem ist er entschieden zu klein (Thin TQFN oder µMax). Ich könnte 
ihn zwar ohne weiteres hier in der Arbeit löten- aber auf WELCHE 
Lochrasterleiterplatte soll der passen? :))

Es muss doch ein Bauteil geben, welches in der Lage ist, 600mV über 
diese beiden Widerstände potenzialfrei zu messen und das Signal 
Prozessorgerecht umzuwursteln? Es müsste ja nichtmal potenzialfrei sein, 
wichtig ist, dass der µC eben nur max. 5V abbekommt. (mit 
Spannungsteilern wird das entschieden zu ungenau, leider...)

Evtl. hast du eine Idee? :)

Viele Grüsse und DANKE,
Hubert

von M. P. (firstwatt)


Lesenswert?

Hi nochmals!

UFF, kaum poste ich hier "MAX4070", wird schon ein schöner Link draus, 
und ich bekomme den Tip, für diesen Zweck einen ACS712 zu benutzen.

Misst dieser denn wirklich so wie im Datenblatt angezeigt absolut 
Potenzialfrei? Also kann ich ihn mit den Pins IP+ und IP- (1,2 u. 3,4) 
wirklich einfach parallel an meinen WS hängen?

Die Fragen mögen für einen Profi etwas dümmlich erscheinen, aber ich bin 
nicht tief genug in der Materie drin, um andere Aussagen machen zu 
können :(

Viele Grüsse,
Hubert

von ich da (Gast)


Lesenswert?

Klar misst der ACS 712 potentialfrei, es handelt sich im einen 
Hallwandler.

Prüfe mal mit einem OhmMeter den Rahmen vom Display mit jedem Pin der 
Anschlussleiste. Ich gehe davon aus, der Rahmen ist nicht potentialfrei 
sonden hat über die Befestigungslaschen eine Verbindung mit GND.

Würde sogar Sinn machen weil der Rahmen dann als Abschirmung gelten 
darf.
Sollte keine Verbindung mit GND bestehen, versuche mal eine zu machen 
und zu testen.

Desweiteren, du verwendest den 1wire Befehl 1wverify. Was willst du 
damit erreichen? Gezielt den Baustein ansprechen? Wenn ja, ist das so 
nicht korrekt. Das muss mit dem ROM Befehl gemacht werden. Wie poste ich 
noch.

Was spricht eigentlich dagegen die ellenlange Datenleitung zum Display 
radikal zu kürzen indem du das uC Board nahe zum Display versetzt?
Also auf die Frontplatte. Die Messleitungen dürfen länger sein, 
abgeschirmt.

von ich da (Gast)


Lesenswert?

1wire code Sensor ansprechen,
1wreset
1wwrite &H55  'ROM Befehl
1wwrite B1(1), 8  'Bausteinnummer senden
1wwrite &HBE
W(1) = 1wread(9)

.........................................
Bausteinadresse vorher eingeben mit
B1(1) = &H10 : B1(2) = &H2A : B1(3) = &HF6 usw.
weitere Bausteine halt mit B2(), B3() usw

Wenn du schon mit 1wire Bausteinen arbeitest bietet sich dieser Baustein 
vielleicht für dich an. DS2438. Schau mal ins Datenblatt.
Ist halt nicht so einfach für den -24 V Zweig zu verwenden.
Schaden aber nicht zu wissen dass es sowas gibt.

von Hackes (Gast)


Lesenswert?

Hallo Hubert,

man der ACS712 sieht doch schon ganz gut aus. Ich muß mich nur mal in 
das Datenblatt einlesen.

Gruß Hackes

von ich da (Gast)


Lesenswert?

Wie parallel zu deinem WS hängen. Was ist WS, hab nicht nachgeschaut wo 
sowas in deiner Schaltung auftaucht.

Der ASC712 ist ein Stromsensor. Das heißt, du musst ihn in die Leitung 
strommäßig reinhängen, deren Strom du messen willst.

Strom/Spannungswandler. Macht aus mA bzw A eine Spannung am Ausgang.

von M. P. (firstwatt)


Lesenswert?

Hallo Jungs!

@ich da:
ups, ich meinte eigentlich in Reihe zu meinem R11/R12... Logisch.
Perfekt, dann werd ich die Burschen gleich mal ordern! :)

Ich messe zwar nur 1.3A, denke aber, eine ausreichende Genauigkeit zu 
erreichen. HERRLICH! Das ist ja eine absolut perfekte Lösung!

Für dein Listing: VIEEELEN DANK! Super, dass einem hier eine echt klasse 
Chance gegeben wird, zu lernen und zu basteln. :)

Ich hatte das LCD bereits gegen sämtliche Pins gemessen, keines hatte 
Kontakt zur Alufront. Es ist alles etwas suspekt, aber wie schon weiter 
oben in einem meiner Beiträge geschrieben, werde ich das Display in der 
endgültigen Variante meiner Leiterplatte direkt an den µC per 
Stiftleiste koppeln, dann sollte ich Interferenzen zumindest 
einschränken können.

@Hackes:

Wenn du magst, les dich ein! Freut mich riesig!

Viele Grüsse,
Hubert

von M. P. (firstwatt)


Lesenswert?

Hi nochmals!

Nach meinen Berechnungen müsste ich bei einer AVCC von 5V bei 10bit 
AD-Genauigkeit ca. +/-5mV genau Spannungen messen können.
Das heisst, ich messe meinen Strom von etwa 1.3A durch R11 und 1.3A 
durch R12 auf um die 27mA genau. (bei einer Ausgangsspannung des ACS712 
von 185mV je 1A)
Hinzu kommen noch die 1,5% Toleranz des ACS712 selbst, aber auch damit 
kann ich leben.

Das reicht absolut aus. Die 5V an AVCC möchte ich ungern ändern, da ich 
für das VU-Meter auch eine halbwegs passende Auflösung haben will.

Das klingt alles einfach zu gut. Langsam aber sicher nimmt das Projekt 
Formen an, Burschen!

Grüsse,
Hubert

von ich da (Gast)


Lesenswert?

Aufpassen, ins Datenblatt schauen. Bei 0 Ampere gibt das Ding die halbe 
Betriebsspannung aus, also 2,5 V. Weil das Ding ja auch Wechselströme 
messen kann. 0 Volt und 5 V sind dann jeweils die Stromgrenzwerte, je 
nach Typ.

Im Datenblatt findest du auch Apl. Notes mit OP Schaltungen um je nach 
Bedarf anpassen zu können.

Übrigens, auch mal ins Datenblatt vom Display schauen. Du findest 
Hinweise die unbenutzen 4 Eingänge sind weder an GND Potential noch an 
VCC Potential zu legen. Sie sind offen zu lassen, haben Pull-Up 
Widerstände intern, oder je nach Hersteller Pulldown R's.

Ich verstehe noch nicht ganz was du mit dem Controller und LCD Display 
machen willst. Nur ne Kontrolle der Endstufentransis um je nach Bedarf 
Lüfter zu schalten damit die Thermik im Rahmen bleibt? Oder sonst noch 
was?

Der Atmega 16 hat noch einige Pins übrig, Endstufenstrom misst du eh, 
folglich wäre zu überlegen ob du nicht noch per Balken_LED's eine 
Pegelanzeige, bzw Belastungsanzeige zaubern solltest.

So hättest du auch eine optische Kontrolle bzw dynamische Anzeige.
Übers LCD könntest du das auch per Text in Form von % Angaben machen.
Nur wird das optisch nicht so viel her machen, weil die Zahlen zu 
schnell wechseln, jenachdem was an Musik usw verstärkt wird.

Wie wär es mit sowas an optischem Schnickschnack?

von M. P. (firstwatt)


Lesenswert?

Hallo ich da!

Zum Display: Es spielt leider keine Rolle, ob ich Kondensatoren an die 
Versorgung oder die offenen Pins an Masse hänge, bzw. offen lasse.
Immer hängt es sich auf, wenn man den Ringkern aus/einschaltet.
Mal sehen, ob sich das bessert, wenn ich alles kompakter aufgebaut habe.

Der Amp ist ein sog. Class A Aufbau. Deshalb liegen schon im "Leerlauf" 
1.25A je Mosfet an. Ich überwache beide Mosfets (N und P) thermisch 
mittels DS18B20 (damit steuere ich den Lüfter) und parallel dazu 
ermittle ich den Strom, den sie im Betrieb bekommen. Dieser ändert sich 
schaltungsbedingt nämlich auch mit der Temperatur.
Ich betreibe die beiden Amps jetzt seit etwa 2 Monaten, und musste 
feststellen, dass der Offset am Lautsprecherausgang noch nicht richtig 
eingestellt zu sein scheint. (dies wird mittels zweier Potis in der 
Schaltung gemacht, nachdem sie etwa 1-2 Stunden eingeschaltet war- ich 
habe aktuell bei warmem Amp bei einem 10mV, beim anderen -20mV)
Es ist dazu zu sagen, dass ich bereits etwa 15 mal eingestellt und 
herumprobiert habe.
Daraus ist dann irgendwie der Gedanke entstanden, sich die Werte einfach 
bequem auf einem Display während des Betriebs anzeigen zu lassen, um 
ggf. etwas nachzustellen und so irgendwann den richtigen Wert zu finden.
Allgemein ist der Aufbau thermisch etwas problematischer, weil mein 
"unterer" Mosfet den darüberliegenden mit erwärmt.
Je mehr Strom durch die Mosfets fließt, desto besser der Klang (in 
gewissem Rahmen natürlich). Daher ist eine Kontrolle ein guter Weg, sich 
einem "Optimalzustand" zu nähern.

Es ist natürlich zum Großteil eine nette Spielerei. ;)

Ein VU-Meter ist bereits programmiert, aber noch ohne Peak-Hold und 
leider viel zu träge, bzw. flackernd. (das wird die nächste Baustelle, 
aber wohl "nur" softwareseitig)
Daher scheiden die LED's aus, auch wenn diese natürlich für so einen 
Zweck viel besser wären. Auch ein OLED Display gäbe es, aber nur als 
16x2 Zeichen Anzeige.
Die Temperaturen und Ströme lasse ich in einem Menü meines Programms 
natürlich auch grafisch als Balken darstellen, um von der Couch aus 
alles besser erkennen zu können- es ist aber interessant, dass du mir 
hier ähnliches vorschlägst, somit scheint die Idee nicht wirklich so 
schlecht zu sein! :)

Viele Grüsse,
Hubert

von Hackes (Gast)


Lesenswert?

Hallo Hubert,

ich war leider aus beruflichen Gründen in letzter Zeit etwas 
"verhindert". Bist Du schon was weiter gekommen?

Gruß Dirk

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.