Hallo miteinander
Ich bin noch Anfänger auf dem Programmierweg mit Bascom, hab allerdings
bereits mit LCDs und Taster Projekte erstellt.
Meine Frage ist, wie wählt Ihr einen Attiny oder Atmega aus?
Mein neues Projekt soll einen ADC Wert von 15 Konstanten mit dem
Temperaturwert von einem DS18b20 vergleichen und entsprechend 2 Leds und
ein Ausgang schalten.
In der Übersicht:
AttinyXX im 8poligen Gehäuse
interner Quarz
2 Betriebs/ Störungs Led
1 einfach Ausgang
1 ADC der anhand 15 vorgegebenen Werten entsprechend handelt
1 DS18b20 Temperatursensor
ISP wenn möglich
AVR Bascom als Programmiersprache
Ich würde am liebsten den Attiny13 nehmen, reicht hier aber der Flash
und der Ram für solche Anwendungen?
Ansonsten den Attiny25 wenns nicht anders gehen würde.
Wie wählt Ihr den Chip aus?
Gruss
ich nehme attinys nur wenn ich kaum platz habe sonst immer den atmega8
wenn ich weiss das projekt könnte größer werden den atmega 16 damit hat
man genug pins und sollte der flash nicht reichen kann man ihn ohne
umbau einfach durch ein atmega32, 64 oder 128 tauschen
Wenn Du nicht weißt, ob der Atmel ausreichend groß ist, jedoch die
Anwendung kennst, kannst Du unter Bascom losprogrammieren und dann zeigt
er Dir schon beim Kompilieren, ob der Platz reicht oder nicht.
ADC und Temp lesen passt schonmal in den Tiny13. Jetzt kommt es darauf
an, wie das mit den 15 Konstanten gemeint ist.
Einen ADC Wert auf 15 Konstanten einzuteilen erfordert recht genaue
Hardware.
Peter R. schrieb:> Einen ADC Wert auf 15 Konstanten einzuteilen erfordert recht genaue> Hardware.
Hm? Das schaff jeder AVR mit ADC problemlos. Wichtig ist nur, ein
vernünftiges analoges Signal am ADC zu haben.
Genau das meinte ich mit Hardware. Lange Leitungen z.B. an einem
Widerstandsarray und ein Handy oder anderes Störsignal in der Nähe und
schon passt es nicht mehr.
Allerdings kann man eine Toleranz mittels Shift right oder AND einbauen,
so dass die 63 Zwischenwerte auch noch gelten.
Hallo
Danke erstmal für die Antworten.
Ich möchte mittels 15 Schalterpositionen 15 verschiedene Widerstande vor
den ADC Eingang schalten.
Bzw. 2 Schalterpositionen direkt mit GND oder VCC belegen.
Der ADC soll dann die Spannung messen und diese mit 15 vorprogrammierten
Werten vergleichen. Der der am nächsten ist, wird gewählt und als
momentane Schaltgrenze gebraucht.
Sobald die Temperatur am DS18b20 tiefer ist als diese Schaltgrenze,
schaltet der eine Ausgang ein. (ohne PWm oder sonst was)
Ich brauche zwingend einen kleinen Attiny vom Gehäuse her,
wahrscheinlich wird es ein SMD Projekt.
Hättet Ihr auch gleich noch einen besseren Vorschlag zu meinem jetztigen
Stand?
Gruss Philippe
Edit:
Ich werde Metallschicht Widerstände verwenden. Kennt jemand ein guter
Händler für verschiedene Werte? Nicht nur die E12 Reihe.
Hm,
also baust Du mit Widerständen einen Poti, der Deine Temperaturvorgaben
darstellt und wenn's zu heiß oder kalt wird geht die Heizung an.
Habe ich das soweit richtig verstanden ?
Warum nicht gleich ein Poti ?
Kannst Du mal einen Schaltplan reinstellen ?
Ich denke mal, dass Philippe B. ein Poti mit genau
reproduzierbaren Widerstandswerten haben möchte.
Das setzt natürlich einen 15-stufigen Schalter mit
hochwertigen Kontakten voraus. Der wird nicht billig sein
und einiges an Platz benötigen!
dumdidum schrieb:> Hm,> also baust Du mit Widerständen einen Poti, der Deine Temperaturvorgaben> darstellt und wenn's zu heiß oder kalt wird geht die Heizung an.> Habe ich das soweit richtig verstanden ?> Warum nicht gleich ein Poti ?> Kannst Du mal einen Schaltplan reinstellen ?
Ja genau so meine ich es.
Ein Poti kann ich nicht brauchen, denn ich kann optisch nicht Wissen was
für ein Wert momentan eingestellt ist. Daher mit festen Widerständen.
Ein Schaltplan hab ich noch nicht, bin erst an der Planung.
@Bernie
Wenn ich die Referenzspannung des ADC auf VCC setzte. (Ich verwende 5V)
Hab ich gerundet folgende Linearespannungen zur Verfügung.
0 0.357 0.714 1.071 1.428 1.785 2.142 2.499 2.856 3.213 3.57
3.927 4.284 4.641 5
Ich werde die Widerstände (mit 1% Toleranz) nach diesen ungefähren
Spannungen berechnen und dann gerechneten Wert gleich als Konstante ins
Programm schreiben.
Ein normaler Drehschalter wie dieser hier hat einen Überganswiderstand
von 0,001Ohm und das kann mit Toleranzen vernachlässigt werden. Oder?
http://www.reichelt.de/Drehschalter/DS-1PC/3/index.html?;ACTION=3;LA=2;ARTICLE=7211;GROUPID=3283;artnr=DS+1PC;SID=11UC9knX8AAAIAABLy2Pgfdd38af412fb887fb127ee6ee3f6ed7f
Gruss Philippe
Philippe B. schrieb:> Ein Poti kann ich nicht brauchen, denn ich kann optisch nicht Wissen was> für ein Wert momentan eingestellt ist. Daher mit festen Widerständen.
Also es gibt auch Rastpotis, die dann genau definierte Werte haben.
Außerdem verstehe ich da Dein Problem nicht, Du definierst einfach von
den 256 Werten die Dein ADC liefert Teilbereiche, also von 0-16 ist 0,
von 17-33 ist 1 usw. usf.
Wieso kannst Du nicht wissen was eingestellt ist ?
Eine übliche Beschaltung wäre z.B. sowas:
+----------+
| Tiny13 +[ADC0]------------[Poti]
| +------------------[LED]
| +------------------[LED] [Last]
| | |
| +-----------------------[1k]----|< NPN
+----------+ |
GND
Dann fragst Du in Deinem Programm in einer Endlosschleife den ADC0 ab
und vergleichst ob der Wert in einem Deiner definierten 15 Wertebereiche
liegt.
Oder habe ich da jetzt was übersehen ?
Das mit dem Drehschalter klappt schon.
Anfänger schrieb:> interner Quarz
Hat er nicht. Quarze sind nie intern. (Ausnahme: spezielle
Uhrenbausteine)
Der RC-Oszillator wird für Deine Zwecke jedoch ausreichen.
Der ATtiny13(A) sollte reichen.
Ich weiß allerdings nicht, was Bascom erzeugt. In ASM würde das gehen.
ISP wird gewisse Probleme bereiten, da der Programmer im Zweifel gegen
den 'Poti-Schalter', den DS1820 arbeiten oder eine LED treiben muß.
Gruß
Jobst
Anfänger schrieb:> Mein neues Projekt soll einen ADC Wert von 15 Konstanten mit dem> Temperaturwert von einem DS18b20 vergleichen und entsprechend 2 Leds und> ein Ausgang schalten.
die Ursprungs-Aufgabenstellung klingt wei eine normale
Temerpatur-Regelung, welche "Anfänger" da erfunden hat.
> Mein neues Projekt soll einen ADC Wert von 15 Konstanten> mit dem Temperaturwert von einem DS18b20 vergleichen> und entsprechend 2 Leds und ein Ausgang schalten.
Sollwerterfassung: 15 Widerstände über A/D Wandler(warum so
kompliziert?)
Istwerterfassung: mittels DS18b20
Ausgang: 2 LED (vielleicht zur Grenzwert-Darstellung?)
1 "Ausgang" (digital)
Insbesondere braucht man für die Sollwert-Vorgabe kaum E24 oder E48
Metallfilm-Widerstände
dumdidum schrieb:> Also es gibt auch Rastpotis, die dann genau definierte Werte haben.> Außerdem verstehe ich da Dein Problem nicht, Du definierst einfach von> den 256 Werten die Dein ADC liefert Teilbereiche, also von 0-16 ist 0,> von 17-33 ist 1 usw. usf.
Etwa so wollte ich das Programm so oder so machen. Die Widerstände sind
ja auch nicht auf lange Sicht hin immer gleich.
Dennoch hab ich keine feste und sichere Positionierung des Potis. Bin
ich jetzt mit dem Poti genau an der Grenze eines ADC Bereichs wird es
einige Zeit funktionieren und durch Alterung oder Temperaturschwankungen
plötzlich in einen neuen Bereich gehen.
Da bau ich lieber feste vorgegebene Positionen ein.
Jobst M. schrieb:> Hat er nicht. Quarze sind nie intern. (Ausnahme: spezielle> Uhrenbausteine)> Der RC-Oszillator wird für Deine Zwecke jedoch ausreichen.
Sorry natürlich RC Oszillator:-)
Jobst M. schrieb:> ISP wird gewisse Probleme bereiten, da der Programmer im Zweifel gegen> den 'Poti-Schalter', den DS1820 arbeiten oder eine LED treiben muß.
Ich könnte den ISP auch weg lassen. Einmal programmiert muss ja nichts
mehr geändert werden. Nur bei Testobjekt wäre es ohne schlecht, ich kann
allerdings auch einfach die Angeschlossenen Bauteile mittels Jumper kurz
abklemmen.
Wegstaben Verbuchsler schrieb:> Sollwerterfassung: 15 Widerstände über A/D Wandler(warum so> kompliziert?)> Istwerterfassung: mittels DS18b20> Ausgang: 2 LED (vielleicht zur Grenzwert-Darstellung?)> 1 "Ausgang" (digital)>> Insbesondere braucht man für die Sollwert-Vorgabe kaum E24 oder E48> Metallfilm-Widerstände
Und wie soll die Temperatur eingestellt werden?
Auch darüber schon gedacht?
Gruss Philippe
Philippe B. schrieb:> Dennoch hab ich keine feste und sichere Positionierung des Potis. Bin> ich jetzt mit dem Poti genau an der Grenze eines ADC Bereichs wird es> einige Zeit funktionieren und durch Alterung oder Temperaturschwankungen> plötzlich in einen neuen Bereich gehen.
Nein eben nicht !
Ob Du nun einen 1k-Poti anschließt oder einen 100M-Poti, der ADC liefert
immer Werte von 0 bis 255 bei 8bit.
Außerdem könntest Du einfach mit einer einzigen Taste die
einzustellenden Werte durchgehen, zehnmal gedrückt Sollwert 10,
sechszehnmal gedrückt Sollwert 1, Stichwort modulo ...
Philippe B. schrieb:> Und wie soll die Temperatur eingestellt werden?> Auch darüber schon gedacht?
da gibt es verschiedenste Möglichkeiten (analog oder digital)
Jobst M. schrieb:> Dafür hat er keinen Port mehr frei ...
Also wenn er kein Poti nehmen will aber die 15 Werte sowieso fix sind,
kann er den entsprechenden Wert in der Software halten und statt via ADC
einfach mittels Taster sequentiell durchgehen.
Einen Pin hat er noch frei und wenn eine mehrfarbige LED verwendet wird
sogar zwei:
1x Taster/Poti
1x OneWire
1x RGB-LED
1x Schaltausgang
Ich sehe da keine großen Probleme ...