Hallo
Habe ja beim ADC des Attiny 841 bereits ein bischen gefragt. An Hand
euer Angaben und dem Datenblatt habe ich mal den folgenden Code
geschrieben,
1
voidAnalogComparator()
2
{
3
DIDR0|=((1<<ADC1D)|(1<<ADC2D));// ADC0 und ADC1 Digital Input Deaktivieren
Leider ist mir nicht ganz klar was ich für den Komparator brauche.
PA2-ADC2 liegt auf ca. 2,5V
PA3-ADC3 Regler zwischen 0 und 5V
Habe zu meinem Verständnis noch viele Kommentare und Erklärungen drin.
Habe ich was vergessen oder falsch? Bitte meckern!
LG Paul
Sorry, das versteh ich nicht so ganz.
Im Kapttel 16.13.3 des DB wird das Register ADCSRA beschrieben. Mit
ADEN=1 wird der ADC eingeschaltet.
Mit ADPS 0-2 wird der Prescaler eingestellt.
Was istdaran falsch?
Paul schrieb:> Sorry, das versteh ich nicht so ganz.> Im Kapttel 16.13.3 des DB wird das Register ADCSRA beschrieben. Mit> ADEN=1 wird der ADC eingeschaltet.> Mit ADPS 0-2 wird der Prescaler eingestellt.> Was istdaran falsch?
Falsch ist daran, dass du ja, dem Titel des Threads und dem Namen der
Funktion nach zu urteilen, überhaupt nicht den ADC benutzen willst,
sondern den AC, also den Analogkomparator.
Beides hat nur sehr wenig miteinander zu schaffen. Eigentlich nur, dass
man für den AC den Multiplexer des ADC nutzen kann (aber nicht muss).
Dazu muss der ADC dann aber AUS sein.
c-hater schrieb:> Beides hat nur sehr wenig miteinander zu schaffen. Eigentlich nur, dass> man für den AC den Multiplexer des ADC nutzen kann (aber nicht muss).> Dazu muss der ADC dann aber AUS sein.
Das ist schon wieder ganz was neues für mich.
Hatte angenommen das der ADC und der Komparator zusammenhängen und
wahlweise verschiedene Teile genutzt werden können. Daher auch der Name
Threads.
Wenn der ADC ausgeschaltet sein muss, muss ich den Komparator
einschalten?
Paul schrieb:> Im Kapttel 16.13.3 des DB wird das Register ADCSRA beschrieben. Mit> ADEN=1 wird der ADC eingeschaltet.> Mit ADPS 0-2 wird der Prescaler eingestellt.> Was istdaran falsch?
Dass du mit dem zweiten Befehl ADEN=0 setzt, bzw. dass du "=" statt "|="
benutzt.
Paul schrieb:> Das ist schon wieder ganz was neues für mich.> Hatte angenommen das der ADC und der Komparator zusammenhängen
Wie gesagt: nur wenig bis garnicht.
> Wenn der ADC ausgeschaltet sein muss, muss ich den Komparator> einschalten?
1) Der ADC muss nur dann zwingend ausgeschaltet sein, wenn du dessen
Multiplexer für den AC benutzen willst. Ansonsten kann man durchaus
beides gleichzeitig und unabhängig voneinander benutzen.
2) Wenn du den AC benutzen willst, muss er natürlich eingeschaltet sein.
Das ist ein genauso einfacher Zusammenhang wie bei einer Taschenlampe...
3) Der 841 besitzt übrigens zwei ACs. Die Sachen mit der Benutzung des
ADC-Multiplexers trifft nur für AC1 zu. AC0 hingegen besitzt einen
eigenen Multiplexer.
Zusammenfassend: Warum liest du nicht einfach das DB? Da steht das alles
drinne...
Danke für deine Info und für den Hinweis auf das Datenblatt.
Aus diesem Datenblatt habe ich bereits einiges abgeleitet und in der
oberen Software drin. Leider habe ich nicht alles verstanden oder
korrekt angewendet. Deshalb frage ich nach in der Hoffnung etwas mehr zu
verstehen.
Ein Grundsatz in dieser Runde ist, das man zu vernünftigen Fragen auch
vernünftge Antworten bekommt.
c-hater schrieb:> 1) Der ADC muss nur dann zwingend ausgeschaltet sein, wenn du dessen> Multiplexer für den AC benutzen willst. Ansonsten kann man durchaus> beides gleichzeitig und unabhängig voneinander benutzen.>> 2) Wenn du den AC benutzen willst, muss er natürlich eingeschaltet sein.> Das ist ein genauso einfacher Zusammenhang wie bei einer Taschenlampe...
Zum zweiten Teil hatte ich die Frage gestellt. Mit welchem Register muss
ich den AC einschalten? (nicht ADC)
Paul schrieb:> Ein Grundsatz in dieser Runde ist, das man zu vernünftigen Fragen auch> vernünftge Antworten bekommt.
Leider nicht. Hier wird der mit der blödesten Antwort gefeiert. Die
Moderation applaudiert dazu.
:(
Paul schrieb:> Zum zweiten Teil hatte ich die Frage gestellt. Mit welchem Register muss> ich den AC einschalten? (nicht ADC)
Kommt drauf an. ADC0 ist nach Reset automatisch eingeschaltet, ADC1
hingegen ausgeschaltet. Auch das steht alles im DB. Die Zeile "initial
values" bei den Registerbeschreibungen von ADCSRAn beim Bit ACDn sagt
dir das.
c-hater schrieb:> Paul schrieb:>>> Zum zweiten Teil hatte ich die Frage gestellt. Mit welchem Register muss>> ich den AC einschalten? (nicht ADC)>> Kommt drauf an. ADC0 ist nach Reset automatisch eingeschaltet, ADC1> hingegen ausgeschaltet. Auch das steht alles im DB. Die Zeile "initial> values" bei den Registerbeschreibungen von ADCSRAn beim Bit ACDn sagt> dir das.
Du hast mich mit deinem ADC völlig wuschig gemacht. Das "D" also überall
streichen außer bei ACDn.
Funktioniert leider alles nicht. Die LED am Ausgang leuchtet nicht.
Verändere mit dem Poti die Spannung zwischen 0 und 5V. Den Ausgang mit
der LED habe ich getestet und Funktioniert getrennt.
Keiner eine Idee dazu oder funktionierenden Code?
Paul schrieb:> Funktioniert leider alles nicht. Die LED am Ausgang leuchtet nicht.> Verändere mit dem Poti die Spannung zwischen 0 und 5V. Den Ausgang mit> der LED habe ich getestet und Funktioniert getrennt.
Zeig' deine Schaltung und den vollständigen Code.
Paul schrieb:> Das ist der komplette Code. Ein paar Sachen sind auskommentiert. Im Bild> oben ist die Schaltung
Na endlich mal Fakten.
> Funktioniert leider alles nicht. Die LED am Ausgang leuchtet nicht.> Verändere mit dem Poti die Spannung zwischen 0 und 5V.
Das liegt daran, dass das Poti überhaupt nicht mit dem AC verbunden ist.
Das Poti hängt an PA3. Die Eingänge des AC0 hast du aber so
konfiguriert:
positiv: interne Referenzspannung
negativ: PA2
Da kannst du also am Poti drehen, bis du schwarz wirst, das wird AC0 zu
keiner Reaktion bewegen können.
Wenn ich PA2 auf U/2 auf ADC2 und PA3 mit Regler auf ADC3 setze ergibt
sich für ADC2 - negativ und für ADC3 - positiv. Nach Tabelle 16-3 ergibt
das 110100 daraus ergibt sich 0x34. Wie habe ich die interne
Referenzspannung auf positiv gelegt?
Paul schrieb:> Wenn ich PA2 auf U/2 auf ADC2 und PA3 mit Regler auf ADC3 setze ergibt> sich für ADC2 - negativ und für ADC3 - positiv.
Was fängst du denn jetzt schon wieder mit irgendwelchem ADC-Scheiß an?
Du willst den AC benutzen und nicht den ADC!
> Wie habe ich die interne> Referenzspannung auf positiv gelegt?
Kennst du deinen eigenen Code nicht? Du hast das sogar ausdrücklich als
Kommentar drangeschrieben.
1
ACSR0A|=(1<<ACPMUX2);// Interne Referenzspannung der Bandgabel --> AIN00
Also ist das sehr wahrscheinlich garnicht dein eigener Code, sondern
unverstandener, stumpfblöd zusammenkopierter Kram. Ja, du warst sogar zu
faul, die Kommentare in den Raubkopien zu lesen...
Das ist in der Tabelle 14-5 "Source Selection for Analog Positiv Input"
angegeben und steht damit auf "Internal bandgap referenz voltage".
Wie kann ich das umschalten?
c-hater schrieb:> Also ist das sehr wahrscheinlich garnicht dein eigener Code, sondern> unverstandener, stumpfblöd zusammenkopierter Kram. Ja, du warst sogar zu> faul, die Kommentare in den Raubkopien zu lesen...
Das ist mein eigner Code. Habe es dem Datenblatt und den wenigen
Hinweisen im Netz entnommen. Habe dazu nichts zusammen geklaut. Das ich
das D nicht gestrichen habe tut mir leid, bin und bleibe AC.
c-hater schrieb:>> Wenn ich PA2 auf U/2 auf ADC2 und PA3 mit Regler auf ADC3 setze ergibt>> sich für ADC2 - negativ und für ADC3 - positiv.>> Was fängst du denn jetzt schon wieder mit irgendwelchem ADC-Scheiß an?> Du willst den AC benutzen und nicht den ADC!
Die Beine sind vom Hersteller so benannt
Paul schrieb:> Das ist in der Tabelle 14-5 "Source Selection for Analog Positiv Input"> angegeben und steht damit auf "Internal bandgap referenz voltage".> Wie kann ich das umschalten?
Dann lies doch einfach mal, was in der Tabelle steht. Die einzige andere
Wahl ist AIN00. Das ist aber PA1 und nicht PA3. D.h.: es gibt einfach
keine Möglichkeit, mit AC0 die Pegel an PA2 und PA3 zu vergleichen.
Und wenn man die Sache aber für AC1 durchdenkt, stellt man fest: damit
ginge das. Allerdings nur unter Zuhilfenahme des Multiplexers des ADC.
Paul schrieb:> c-hater schrieb:>>> Wenn ich PA2 auf U/2 auf ADC2 und PA3 mit Regler auf ADC3 setze ergibt>>> sich für ADC2 - negativ und für ADC3 - positiv.>>>> Was fängst du denn jetzt schon wieder mit irgendwelchem ADC-Scheiß an?>> Du willst den AC benutzen und nicht den ADC!>> Die Beine sind vom Hersteller so benannt
Nein, das sind nur alternative Funktionen der Pins. Deswegen stehen sie
im Pinout auch in Klammern. Das, was nicht in Klammern steht, ist der
tatsächliche Name des Pins. Die alternativen Namen kann man verwenden,
wenn man die entsprechende alternative Funktion benutzt. Das tust du
aber nicht. Die willst ja nicht den ADC benutzen, sondern den AC. Und
die ACs haben folgende alternative Pin-Namen: AIN00, AIN01, AIN10 und
AIN11. Was PA1 bis PA4 enstpricht. Das Blöde ist halt: zu AC0 gehört PA1
und PA2, zu AC1 hingegen PA3 und PA4.
Die einzige Möglichkeit, doch noch irgendwas zwischen PA2 und PA3 zu
detektieren, besteht darin, AC1 zu benutzen, dessen negativen Input auf
den Multiplexer des ADC zu legen und diesen wiederum auf PA2 als Eingang
zu konfigurieren. Und dann darfst du den Pin auch gerne ADC2 nennen...
ACSR1B|=(1<<ACOE1);// Verbunden mit Ausgang von AC1
17
}
Ein paar Sachen habe ich auskommentiert, da bin ich noch dran.
Funktion ist jetzt, beim drehen des Potis leuchtet die LED bis ca. zur
Hälfte und geht dann aus.
Habe ich was vergessen?
Paul schrieb:> Habe das ganze auf den AC1 umgeschrieben (nicht geklaut)
[...]
> Habe ich was vergessen?
Ja und das nach expliziter Beschreibung, was zu tun ist...
Übrigens: einiges ist auch falsch/unsinnig/nutzlos.
Fazit: Du weißt definitiv nicht mal andeutungsweise, was du da
eigentlich tust und bist offensichtlich auch nicht gewillt, das zu
lernen...
Damit bin ich raus. Für Auftragsarbeiten erwarte ich Kohle.
Paul schrieb:> Habe ich was vergessen?
als hirntoter sicher nicht, da kannst ja weder lesen noch selber
irgendwas sinnvolles schreiben!
geh doch endlich woanders rummüllen, du bist talentfrei und hier ist
nicht deine klippschule.
mt
Apollo M. schrieb:> Paul schrieb:>> Habe ich was vergessen?>> als hirntoter sicher nicht, da kannst ja weder lesen noch selber> irgendwas sinnvolles schreiben!> geh doch endlich woanders rummüllen, du bist talentfrei und hier ist> nicht deine klippschule.>> mt
Wo sind die Moderatoren? Ist die Beleidigung der neue Umgangston hier?
Paul schrieb:> Wo sind die Moderatoren?
Die sind damit beschäftigt, Phantomen nachzujagen oder die wenigen
sinnvollen Beiträge zu löschen, bevor jemand etwas damit anfangen kann.
> Ist die Beleidigung der neue Umgangston hier?
Der neue? Das ist seit mehreren Jahren Gang und Gäbe. Manche haben
offenbar die Lizenz dafür.
Das mit dem Preis ist ernst gemeint. Was kostet es mich wenn du in den
Code investierst und wie lange brauchst du dafür? Bedingung ist in C mit
meiner Hardware, mit AC und ADC und I2C Bus Anbindung, max. für 2 ADC an
einem Joystick mit 2 Potis und einem Taster.
Vergessen zu sagen, ich muss es verstehen.
Hallo Paul
Poste Deine Hardware (Zeichnung) und eine detaillierte
Anforderungsspezifikation und wir können dann in's Geschäft kommen -
preislich werden wir uns schon einigen.
mfg
Manni
Hallo Paul
welchen zeitlichen Rahmen für die Softwareerstellung (in C) hast Du Dir
vorgestellt und welche Anforderungen an die Dokumentation der SW hast
Du?
mfg
Manni
Die Zeichnung für die Platine mit dem Poti für AC und ADC ist bereits
oben zu sehen. Die Zeichning mit dem Joystick (2 x ADC + Taster) hänge
ich mit ran.
Prozessor Attiny 841 mit/ohne Quarz, AC0 und AC1 und ADC, anbindung zum
I2C Bus mit/ohne Adresswahl über Slave Hardware (geht bereits mit ATm
128 als Master), alles in C und so das ich es verstehe, vielleicht noch
Timer.
Hardware ist vorhanden und kann damit alles testen. Doku habe ich keine
grosse Anforderungen, höchsten zu Nachfragen damit ich es verstehe.
Den Aufwand schätze ich nicht allzu hoch ein. Je nach Aufwand so ca. 50
bis 100 Zeilen. Für einen Profi könnten so ca. 1 bis 2 Stunden reichen
oder verschätze ich mich? Zur freien Verwendung für mich und ins Netz,
natürlich mit Urheber.
Habe es doch mal angehängt.
LG Paul
Hallo Paul
Gemäß Deinen Anhängen sind es 3 Platinen
- Encoder
- Joystick
- AC / ADC
alles mit 16 Mhz Quartz und jeweils unterschiedlicher Beschaltung.
Eigentlich keine großartige Sache und wenn dann würde ich es auch im AVR
Studio programmieren.
Sollen es drei *.c files werden (für jedes Board eines) oder nur eines,
wo per #define entsprechend der HW umgeschaltet wird?
Aufgrund schlechter Erfahrungen - bevor ich eine Zeile Code schreibe
will ich eine eindeutige(!!) Anforderungsspezifikation, damit es keine
"Unklarheiten" bei der SW Übergabe gibt -damit sind wir beide auf der
sicheren Seite.
Dokumentation - "keine großen Anforderungen" - auch das ist mir zu
unspezifisch.
Testen kann ich das Ganze nicht, da ich keine HW habe.
Und in 1 - 2 Std - das würde schon etwas länger dauern ...
mfg
Manni
Manni schrieb:> Sollen es drei *.c files werden (für jedes Board eines) oder nur eines,> wo per #define entsprechend der HW umgeschaltet wird?
Für die 3 Platinen brauchte ich jeweils ein Programm, also 3 Programme.
Kein gemeinsames Programm.
Manni schrieb:> Aufgrund schlechter Erfahrungen - bevor ich eine Zeile Code schreibe> will ich eine eindeutige(!!) Anforderungsspezifikation, damit es keine> "Unklarheiten" bei der SW Übergabe gibt -damit sind wir beide auf der> sicheren Seite.
Versuche wir es mal:
- Anbindung aller 3 Platinen/Programme an den I2C Bus
- Angabe der Variablen
- Falls auf den Platinen eine Adressumschaltung ist mit einbeziehen
- Angabe einer I2C Bus Adresse oder Umschaltung/Auswahl
- Falls eine zusätzliche LED auf der Platine ist, diese durch den Bus
ansprechen
- Taster (ausser Reset) einbeziehen
- beim Joystick sind 2 Poti (2 x ADC), Ausgabe über den I2C Bus
- Encoder über Timer
Manni schrieb:> Dokumentation - "keine großen Anforderungen" - auch das ist mir zu> unspezifisch.
Ausser dem funktionierenden Programm habe ich keine Anforderungen an die
Software. Erachte es aber als selbverständlich das genug Kommentare zur
Funktion mit drin sind und auf wichtige Hinweise.
Auf Grund der Kleinheit der einzelnen Projekte brauche ich keine
umfangreiche Doku.
Bist du auch bei Problemen der Funktion erreichbar?
Hoffe das ich an alles gedacht habe.
LG Paul
Hallo Paul
Paul schrieb:> Erachte es aber als selbverständlich das genug Kommentare zur> Funktion mit drin sind und auf wichtige Hinweise.
Das ist so dehnbar wie Kaugummi - was heißt "genug" Kommentar? Für den
einen User reicht eine Überschrift, ein anderer User will eine kurze
prägnante Beschreibung der Funktion, ein Dritter will jede Zeile
kommentiert haben, um die Funktion zu verstehen.
Auch Deine kurze Auflistung der zu realisierenden Funktionen reicht mir
nicht, das ist eine lieblose Zusammenstellung irgendwelcher Forderungen.
Du erwartest von mir - gegen Entgeld - saubere, funktionsfähige SW.
Ich erwarte klare, eineindeutige Anforderungen.
Ich bin diesbezüglich ein "gebranntes Kind" - wenn Du Dir nicht die Mühe
machen willst/kannst, Deine Anforderungen GENAU zu spezifizieren werde
ich nichts machen.
Speziell im Hinblick auf Grenzwerte, Zykluszeiten, Timer etc...
Sei mir nicht böse, aber die Mühe, eine aussagekräftige
Anforderungsspezifikation zu erstellen, musst Du Dir schon machen.
mfg
Manni
Paul schrieb:> Versuche wir es mal:> - Anbindung aller 3 Platinen/Programme an den I2C Bus> - Angabe der Variablen> - Falls auf den Platinen eine Adressumschaltung ist mit einbeziehen> - Angabe einer I2C Bus Adresse oder Umschaltung/Auswahl> - Falls eine zusätzliche LED auf der Platine ist, diese durch den Bus> ansprechen> - Taster (ausser Reset) einbeziehen> - beim Joystick sind 2 Poti (2 x ADC), Ausgabe über den I2C Bus> - Encoder über Timer
Platine 173:
- Bei Tastendruck T2 leuchtet L2
- Beim Betätigen von Poti (PA3) auf ca. U/2 schaltet L3 ein/aus
- Bezugsspannung ist dabei U/2 von der Versorgungsspannung 5V auf PA2
- Möglichkeit der Messung mit ADC (oder)
- Benutzung von AC1
- übertragung/Abruf der Werte oder Zusatnd zum Master mittels I2C Bus
- Angabe der Busadresse im Programm
Platine 172
- Busadressen auswahl mit 3 Steckbrücken an PA1, PA2, PA3
- Angabe der 3 möglichen Busadressen im Programm
- Auswertung Encoder mit Timer z.B. 8MHz Nr. egal
- übertragung/Abruf der Werte links oder rechts oder stop zum Master
- L2 als Quittung vom Master aus ansprechbar
Platine 174
- Auswertung Joystick mit 2 mal Potis für links-rechts und oben-unten
durch
2 x ADC Werte von je 0-1023, Bezugsspannung 5V
- Auswertung Taster auf Betätigung
- Anbindung an den I2C Bus und übertragung der 2 Werte von den Potis und
Zustand Taster bei Abruf durch Master
- Busadressen auswahl mit 4 Steckbrücken an PA5, PA3, PA2, PA1
- Angabe der Busadressen im Programm
Kommentare an den Zeilen, kurz und bündig (kurze Funktion), um eine
nachträgliches Verständnis zu ermöglichen in deutsch.
LG Paul
Hallo Paul
Ich hatte schon MEHRFACH erwähnt, dass ich eine genaue, eineindeutige
Anforderungsspezifikation benötige und
Paul schrieb:> Platine 173:> - Bei Tastendruck T2 leuchtet L2> - Beim Betätigen von Poti (PA3) auf ca. U/2 schaltet L3 ein/aus> - Bezugsspannung ist dabei U/2 von der Versorgungsspannung 5V auf PA2> - Möglichkeit der Messung mit ADC (oder)> - Benutzung von AC1
Taste T2 ist hw-mäßig NICHT entprellt - soll sie per SW entprellt werden
"ca" ist ja wohl NICHT eindeutig
- Möglichkeit der Messung mit ADC ("oder")
- Benutzung von AC1
ist nicht eindeutig - somit bin ich raus.
Ich habe keine Lust, SW zu schreiben, die dann Deinen schwammigen
Anforderungen nicht genügt. Damit ist Ärger wegen der Bezahlung
vorprogrammiert.
Viel Glück bei Deiner Suche.
mfg
Manni
Hallo Manni
habe es so eindeutig geschrieben wie ich konnte. Leider habe ich dabei
ein paar Angaben nicht korrekt gemacht.In dieser einfachen Form brauche
ich keine Entprellung.
Bei AC bzw. ADC hattest du die Auswahl angegeben. Da hatte ich
angenommen das beides mit Auswahl möglich ist. Damit bleibt nur AC.
Habe nicht vor dir irgendwelche Problem bei der Bezahlung zu machen.
Will dich auch nicht auf etwas festnageln was ich aus unkenntnis nicht
angegeben habe. Ansonsten will ich einfach das die Programme
funktionieren. Alle änderungen kann ich selbst vornehmen.
Komm, versuch es mit mir. Testen wir es einfach, sag was es kostet z.B.
ein Programm und ich zahle (nicht PayPal)
LG Paul
Hallo Paul
Paul schrieb:> Bei AC bzw. ADC hattest du die Auswahl angegeben. Da hatte ich> angenommen das beides mit Auswahl möglich ist. Damit bleibt nur AC
Ich hatte bei AC/ADC KEINE Auswahl angegeben, das hattest Du gemacht:
Paul schrieb:> - Möglichkeit der Messung mit ADC (oder)> - Benutzung von AC1
Wie schon erwähnt - für eine SW Erstellung ist eine eineindeutige
Anforderungsspezifikation nötig und ohne die kann ich keine SW
erstellen.
Du hast nun mehrfach gezeigt, dass Du das nicht kannst (eine
eineindeutige Anforderungsspezifikation erstellen), da Dir selbst nicht
klar ist, was die SW leisten soll - z.B. welche Bits/Bytes sollen auf
dem I2C übertragen werden (ich gehe davon aus, dass Du eine
funktionsfähige I2C Kommunikation Master (wer ist das??) zum Attiny
hast)
Paul schrieb:> Alle änderungen kann ich selbst vornehmen.
Nur wenn Du die SW verstanden hast.
So wie es jetzt ist, würde es folgendermaßen ablaufen:
Ich erstelle eine SW und stelle sie Dir zur Verfügung (und erwarte ein
monetäres Entgeld, dessen Höhe noch zu vereinbaren wäre)
Du testest, stellst fest "entspricht nicht meinen Erwartungen => kein
Bezahlung", hast aber meine SW
Ich muss dann nachweisen, dass die SW entsprechend (unklarer)
Spezifikation funktioniert usw...
Nein, das ist mir zu heikel - da bin ich raus
viel Erfolg bei Deiner Suche
mfg
Paul
Paul schrieb:> Vergessen zu sagen, ich muss es verstehen.
Sorry, wenn du es nicht verstehst, zahlst du nicht oder?? Was ist das
denn für eine dämliche Forderung...und entsprechend ist der Verlauf der
Diskussion...
Gruß Rainer