Datum: 24.07.2005 23:31
Anbei ein Beispiel für eine 4-stellige Multiplexanzeige, die einen ADC-Wert ausgibt. Es werden insgesamt 13 IO-Pins benötigt, d.h. ein ATTiny26 reicht vollkommen aus. Um die Messung nicht zu beeinflussen, wird die Anzeige während der Messung dunkelgetastet. Als Multiplextakt wird 1Mhz 4 256 = 980Hz verwendet. Um ein ergonomisches Ablesen zu gestatten, wird nur jede 256. Wandlung ein neuer Wert dargestellt (4 Werte/s). Außerdem wird der Mittelwert über 256 Messungen gebildet. Zusammen mit der Dunkeltastung steht dadurch der Meßwert wie ne Eins. Für ein einfacheres Platinenlayout wurden Digit 0,2 und 1,3 unterschiedlich beschaltet, deshalb werden zur Ausgabe 2 7-Segmenttabellen benutzt. Die Digit- und Segmentzuweisungen erfolgen über Defines, lassen sich also an beliebige Verdrahtungen anpassen. Das ganze ist in C geschrieben. Peter
Datum: 25.07.2005 06:32
Hi, waere es nicht sinnvoll, den Transistoren einen Vorwiderstand zu bescheren? Sind ja keine FETs sondern normale bipolare Typen. Gruss Tobias
Datum: 25.07.2005 09:30
@Tobias Wiso Widerstände ? Die sind als Emitterfolger geschaltet und daher fließt nur der Strom, der zum Schalten der Transistoren erforderlich ist (Strom durch die Anzeige durch Spannunsgverstärkung des Transistors, vermutlich wenige mA oder sogar noch weniger). @peter dannegger Super Projekt, wollte gerade anfangen dasselbe zu machen, aber das brauche ich ja jetzt nichtmehr... Gibt es dafür eigentlich ein Platinenlayout, wenn du schon schreibst dass deshalb die Anschlussbelegung geändert wurde ?
Datum: 25.07.2005 14:24
Benedikt: Mein Fehler hab da garnicht drauf geachtet ... Peter Danneggers Ehre soll nicht berührt werden :) Gruss Tobias
Datum: 26.07.2005 21:56
@Benedikt, Das Layout kann ich leider nicht rausgeben, da ist auch viel mehr drauf. Peter
Datum: 27.07.2005 12:04
Hallo Peter, die Widerstandsbezeichnung der Segmentwiderstände 332R soll wohl für SMD Widerstände stehen. Das wären dann aber 3,3KOhm !! Ich kenne die verwendeten Anzeigen HDSP-K121 zwar nicht, aber sind 3K3 nicht ein bisschen !sehr! hoch für eine Multiplex-Anzeige ? Ich denke da mehr an 33Ohm (für gemultiplexte übliche 7-Seg.Anzeigen). MfG cdg
Datum: 27.07.2005 12:46
Habe mir mal das Datenblatt der Anzeige angeschaut. Danach denke ich mal, es sind 330Ohm Widerstände. Bei 33Ohm wäre der ATMEL auch überfordert. Ich werde die Schaltung mal aufbauen, nur scheitert es am fehlenden ATtiny26. Danke für die nette und nützliche Schaltung/Software. MfG cdg
Datum: 27.07.2005 12:55
Meine Annahme mit 330 Ohm ist wohl richtig, denn in der E96 Reihe gibt es den Wert 332 Ohm !! Naja, 1% Genauigkeit für Segment-Widerstände aus der E96 Reihe, da muss man erstmal drauf kommen. Ich nehme dann die erwähnten 330 Ohm. cdg
Datum: 27.07.2005 13:39
Ja, 330 Ohm oder 332 Ohm ist egal. Ich nehme immer 1%/50ppm Metallschicht, weil das einfacher ist, als für jeden Wert 1% und 5% zu kaufen. Und der Preisunterschied ist ja nicht so groß. In Schaltplänen ist es üblich, R für Ohm zu schreiben. Für 3,32kOhm hätte ich geschrieben 3k32. Wenn man keine high efficiency Anzeigen nimmt, kann man die Widerstände auch noch verringern. Peter
Datum: 19.01.2006 17:39
Hallo. Hab ein kleines Problem. Arbeite zum ersten mal mit dem AVR Atmega8 und möchte über den ADC0 Eingang eine Spannung einlesen und über 7-SegmentAnzeige ausgeben lassen. Spannung kommt am Eingang an und ich denke das der ADC im frei laufenden Betrrieb läuft, aber er spuckt komische Zahlen auf der Anzeige aus. Meine MEinung ist, dass es an der Ergebnisroutine liegt. Wenn wir in meine VAriable "value" einen Wert definieren rechnet er den entsprechenden Wert aus und gitb ihn auch richtig auf der Anzeige aus. Aber wenn er sich die Werte über den Eingang ADC0 holen soll und diese dann in ADCL und ADCH reinschreibt kommt nur Null raus. Kannst du mir vielleicht helfen?
Datum: 20.01.2006 09:30
@Norbert "Aber wenn er sich die Werte über den Eingang ADC0 holen soll und diese dann in ADCL und ADCH reinschreibt kommt nur Null raus." Was aus dem ADC rauskommt, schmeißt Du weg. Du setzt value3 einmalig auf 0 und gibst es aus. Es ist also voll korrekt, daß nur 0 angezeigt wird. Peter P.S.: Du hast Dir meinen Code überhaupt kein bischen angesehen, stimmts ?
Datum: 20.01.2006 11:55
Sory hatter die falsche Version vom Quellcode. Da muss ich dir recht geben das hat man auf dem ersten Blick gesehen das da Null raus kommt. Ichhab jetzt eine andre Methode angewendet. Könntest du mal bitte darauf schauen. Aber eine Frage stellt sich mir, warum schaut der ADC nicht die ganze Zeit (frei laufender Modus ist aktiviert) die Werte auf der BCD Anzeige aus. Eigentlich sollte er wie eine Multimeter arbeiten ud die Spanung ausgeebn die im ADC reinkommt. Ich habe die Messmethode ja in der while bzw. for Schleife drin so dass er eigentlich dauernd arbeiten muss.Ach noch eine andre Frage, wir hatten schon mal mit nem andren Microkontroller gearbeitet und das war etwas einfahcer da man dort ein Ergebnisregister hatte und es einfach in ne andere Variable schreiben konnte. Des Weiteren hatte wir dort mit Interruprroutinen gearbeitet und mit Timern. Kann ich das so wie es im ANhang zu sehen ist machen und einfach über Methoden starten? Würde mich auf eine baldige Antwort von DIr sehr freuen. Bis dann
Datum: 20.01.2006 12:34
So ich hab jetzt nochmal getest und es liegt an der Routine um das Ergebnis aus den beiden Registern ADCL und ADCH zu bekommen. Meine Routine ist laut dem Programm ICC AVR Wizzard: float value2=0; value=ADCL; //Read 8 low bits first (important) value|=ADCH << 8; //read 2 high bits and shift into top byte //value=200; value2=((5*value)/20.46); value=((int)value2); hunderstel=((value*10)%10); einer=(value%10); Du siehst das ich zum testen value mal auf 200 stelle und schmweißt das richtige aus. Das PRoblem ist ja das ich ne 16Bit Zahl habe und nun aus dieser Zahl die Spanungswerte rausfiltern muss. Kannst du mir beim herausfiltern der jeweils 8-Bit Werte helfen. Weil anscheinend meine vom Wizzard eigentlich falsch ist?
Datum: 20.01.2006 17:03
Hm? 1. Muss man nicht zuerst ADCH auslesen? 2. Geht in deinem "ICC Wizard" (?) nicht einfach 16bitvariable = ADC statt aufwendigem zusammenführen? 3. / 20.46? Wofür ins das? 4. für integer nach ascii (einer/zehner/hunderter) umwandlung gibts auch itoa(...);
Datum: 20.01.2006 19:38
Hallo Peter! >Um die Messung nicht zu beeinflussen, wird die Anzeige während der >Messung dunkelgetastet. Ist da nicht ein leichtes flackern zu sehen? Habe soetwas vor kurzem auch gemacht und die Anzeige bei Wandlung angehalten(weniger Spannungssprünge) aber die Anzeige flackert leider etwas. MFG Uwe
Datum: 20.01.2006 21:27
@Uwe, die Bildfrequenz (Zeitdauer für alle 4 Digits) ist etwa 200Hz, da flackert nichts mehr. Peter
Datum: 21.01.2006 19:32
@Peter, Die Bildfrequenz spielt da keine Rolle, ausschlggebend ist ja wie oft du Wandelst. Wenn die Wandlung fast synchron mit der Anzeige ist, wird fast an der selben Stelle ausgesetzt. Diese Aussetzer werden dann sichtbar. Habe gerade überlegt ob ich nicht ein 5.Scheindigit einfügen sollte und da die Wandlungen laufen lasse. Schönen Tag noch, Uwe
Datum: 21.01.2006 20:28
@Uwe, probier meinen Code doch mal aus, da flackert nichts. Und daß die Wandlung synchron zur Anzeige sein muß, habe ich doch erklärt. Ob nun ein extra Zyklus oder bei jedem Digit ist egal, Hauptsache schneller als 100Hz, damits nicht flackert. Peter
Datum: 17.06.2008 20:57
Sorry fürs ausgraben, aber ich habe folgendes Problem: Digits 0 und 2 zeigen Bullshit an (irgendwelche Segmente, aber keine sinnvollen Zahlen), die Dezimalpunkte werden nicht korrekt angezeigt. Aufbau ist genau nach Schaltung, Source das originale Codebeispiel. Ich weiß nicht mehr weiter...vielleicht hat jemand einen Tip für mich? Marcel
Datum: 17.06.2008 21:18
Äh, nee, is ja peinlich - wer lesen kann ist glatt im Vorteil ! Die beiden Anzeigen sind ja tatsächlich anders layoutet ... Problem gelöst. Marcel
Datum: 18.06.2008 14:25
Peter, mit welchem Programm hast du den Schaltplan erstellt? Sieht sauber aus! Gibt es das kostenlos?
Datum: 18.06.2008 19:55
65432 wrote: > Peter, mit welchem Programm hast du den Schaltplan erstellt? Sieht > sauber aus! Gibt es das kostenlos? Ne, das hatte mal richtig Geld gekostet. Ist Protel 99SE. Die Bauteile definiere ich mir meistens selber. Peter
Datum: 29.06.2008 18:59
Hallo, ist richtig interessant dieser Thread. Nun bin ich noch nicht Sattelfest mit uPC, möchte Euch aber gerne ein paar Fragen stellen: 1. Wäre es möglich das ich als Anfänger es hinbekomme statt des Tiny26 einen Mega88 zu verwenden und den Rest der Schaltung so zu lassen wie sie jetzt ist? Ich müßte doch die richtige defination Datei einbinden (io.h) und mir die richtigen PORT´s aus den Datasheet raussuchen? 2. Ist es möglich eine LCD Anzeige zu verwenden? Ich habe hier in der Codesammlung irgendwo ein LCD.h gesehen. Aber da stoße ich wahrscheinlich an meine Grenzen. 3. Wie, oder kann man das erweitern auf 4 Messwert anzeigen?
Datum: 23.07.2008 07:39
Hallo,
habe mal auf Anregung eines Kollegen versucht dieses nette Projekt auf
Wechselspannungsmessung aufzubohren, aber einige Problemchen damit. Vor
den MC habe ich einen Vorteiler auf URef/2 und kopple dann die
Wechselspannung ein. Vorberechnet sollte das eigentlich funktionieren.
Im Code habe ich eine Peak2Peak- Erkennung ergänzt, welche nach meiner
Meinung eigentlich funktionieren sollte:
SIGNAL( SIG_ADC )
{
static u32 adc_sum;
static u32 MIN;
static u32 MAX;
static u32 TEMP_ADC;
static u8 count;
u8 i;
TEMP_ADC= ADC;
adc_sum += ADC;
if( TEMP_ADC > MAX ){
MAX=TEMP_ADC;
}
if( TEMP_ADC < MIN ){
MIN=TEMP_ADC;
}
count++;
if( count == 0 ){ // 4 values/s
adc_val = adc_sum >> 8; // average über 256 samples
adc_sum = 0;
Peak2Peak= MAX-MIN;
MIN =512;
MAX =512;
}
sowie in der Anzeige dann:
dec_out( (Peak2Peak * SCALE) >> 16 );
Aber irgendwie tut das nicht so wie es soll. Zeigt nicht das an was es
soll (zu wenig). Hat jemand Verbesserungsvorschläge? Ist die Peak-
Erkennung doch zu langsam (zu wenige Abtastungen)? Irgend ein anderer
Fehler?
Jan
Antwort schreiben
Die Angabe einer Email-Adresse ist freiwillig. Wenn Sie automatisch per Email über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.
Wichtige Regeln - erst lesen, dann posten!
- Suchfunktion und Betreffsuche benutzen - vielleicht gibt es schon einen ähnlichen Beitrag
- Aussagekräftigen Betreff wählen
- Im Betreff angeben um welchen Controllertyp es geht (AVR, PIC, ...)
- Groß- und Kleinschreibung verwenden
- Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang
- JPEG-Dateien (.jpg) nur für Fotos und Scans verwenden
- Schaltpläne, Screenshots usw. als PNG oder GIF anhängen
Formatierung (mehr Informationen...)
- [c]C-Code[/c]
- [avrasm]AVR-Assembler-Code[/avrasm]
- [pre]vorformatierter Text (z.B. Code in anderen Sprachen)[/pre]
- [math]Formel in LaTeX-Syntax[/math]
- [[Titel]] - Link zu Artikel



