Forum: Mikrocontroller und Digitale Elektronik Komparator Einstellung beim Attiny 841


von Paul (Gast)


Lesenswert?

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
void AnalogComparator()
2
  {
3
  DIDR0|=((1<<ADC1D)|(1<<ADC2D));      // ADC0 und ADC1 Digital Input Deaktivieren 
4
                      // Register DIDR0 an PA0 und PA1
5
  ADCSRA |=(1<<ADEN);            // ADC aktivieren
6
  ADMUXA |=0x34;              // Wahl Eingang - U/2=ADC2, Regler=ADC3 - 110100                  
7
  ADMUXB &=~((1<<REFS2)|(1<<REFS1)|(1<<REFS0));  // Auswahl Referenzspannung, auf Vcc(5V)                    
8
  ACSR0A |=(1<<ACPMUX2);          // Interne Referenzspannung der Bandgabel --> AIN00
9
                      // Analoger Vergleicher Positiver Eingang Multiplexer                    
10
  ADCSRA =(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0);  // Teilungsfaktor 16MHz/128=125kHz                                      
11
  ACSR0A &=~(1<<ACD0);          // OK // Register ACSR0A - Analogkomparator einschalten = 0                  
12
  ACSR0B |=((1<<HSEL0)|(1<<HLEV0));    // OK // 50 mV Hysterese
13
                      // Register ACSR0B - HSEL0 = 0 - Hysterese ausgeschaltet
14
                      // Register ACSR0B - HSEL0 = 1 - Hysterese eingeschaltet
15
                      // Register ACSR0B - HLEV0 = 0 - Hysterese 20 mV
16
                      // Register ACSR0B - HLEV0 = 1 - Hysterese 50 mV
17
  ADMUXB |=(1<<GSEL0)|(1<<GSEL1);          // Einstellung Verstärkung
18
                      // GSEL0 + GSEL1 = 0 - Verstärkung 0
19
                      // GSEL0 = 1, GSEL1 = 0 - Verstärkung 20
20
                      // GSEL0 = 0, GSEL1 = 1 - Verstärkung 100
21
  ACSR1B |=(1<<ACOE0);          // Verbunden mit Ausgang
22
}
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

von Paul (Gast)


Lesenswert?

Sorry was zu viel drin
1
void AnalogComparator()
2
  {                
3
  ADCSRA |=(1<<ADEN);            // ADC aktivieren
4
  ADMUXA |=0x34;              // Wahl Eingang - U/2=ADC2, Regler=ADC3 - 110100                  
5
  ADMUXB &=~((1<<REFS2)|(1<<REFS1)|(1<<REFS0));  // Auswahl Referenzspannung, auf Vcc(5V)                  
6
                
7
  ADCSRA =(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0);  // Teilungsfaktor 16MHz/128=125kHz                                      
8
  ACSR0A &=~(1<<ACD0);          // OK // Register ACSR0A - Analogkomparator einschalten = 0                  
9
  ACSR0B |=((1<<HSEL0)|(1<<HLEV0));    // OK // 50 mV Hysterese
10
                      // Register ACSR0B - HSEL0 = 0 - Hysterese ausgeschaltet
11
                      // Register ACSR0B - HSEL0 = 1 - Hysterese eingeschaltet
12
                      // Register ACSR0B - HLEV0 = 0 - Hysterese 20 mV
13
                      // Register ACSR0B - HLEV0 = 1 - Hysterese 50 mV
14
  ADMUXB |=(1<<GSEL0)|(1<<GSEL1);          // Einstellung Verstärkung
15
                      // GSEL0 + GSEL1 = 0 - Verstärkung 0
16
                      // GSEL0 = 1, GSEL1 = 0 - Verstärkung 20
17
                      // GSEL0 = 0, GSEL1 = 1 - Verstärkung 100
18
  ACSR1B |=(1<<ACOE0);          // Verbunden mit Ausgang
19
}

von Paul (Gast)


Lesenswert?

Sorry, die Auswertung fehlt noch
1
if (ACSR0A &(1<<ACO0))  // Wenn der Analogkomparatorausgang eingestellt ist
2
        {
3
        //LED_PORT |=(1<<LED_BIT);    // LED einschalten
4
        PORTA |=(1<<PINA0);          // LED 2 ein
5
      }
6
      else
7
      {
8
        //LED_PORT &=~(LED_BIT);      // LED ausschalten
9
        PORTA &=~(1<<PINA0);        // LED 2 aus
10
      }

von leo (Gast)


Lesenswert?

Paul schrieb:
> ADCSRA |=(1<<ADEN);            // ADC aktivieren
...
> ADCSRA =(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0);

Zuerst enablst du, dann wieder nicht ...

leo

von Paul (Gast)


Lesenswert?

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?

von c-hater (Gast)


Lesenswert?

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.

von Paul (Gast)


Lesenswert?

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?

von K. S. (the_yrr)


Lesenswert?

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.

von c-hater (Gast)


Lesenswert?

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...

von Paul (Gast)


Lesenswert?

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)

von Schweinepriester (Gast)


Lesenswert?

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.

:(

von c-hater (Gast)


Lesenswert?

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.

von c-hater (Gast)


Lesenswert?

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.

von Paul (Gast)


Lesenswert?

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?

von c-hater (Gast)


Lesenswert?

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.

von Paul (Gast)


Angehängte Dateien:

Lesenswert?

1
#define F_CPU 16000000UL      // Angabe der Frequenz, wichtig für die Zeit
2
3
#include <util/delay.h>      // Einbindung Datei Pause
4
#include <avr/io.h>        // Einbindung Datei Ausgänge
5
#include <avr/interrupt.h>
6
7
void AnalogComparator()
8
  {
9
  //DIDR0|=((1<<ADC1D)|(1<<ADC2D));      // ADC0 und ADC1 Digital Input Deaktivieren 
10
                      // Register DIDR0 an PA0 und PA1
11
  ADCSRA |=(1<<ADEN);            // ADC aktivieren
12
  ADMUXA |=0x34;              // Wahl Eingang - U/2=ADC2, Regler=ADC3 - 110100                  
13
  ADMUXB &=~((1<<REFS2)|(1<<REFS1)|(1<<REFS0));  // Auswahl Referenzspannung, auf Vcc(5V)                    
14
  ACSR0A |=(1<<ACPMUX2);          // Interne Referenzspannung der Bandgabel --> AIN00
15
                      // Analoger Vergleicher Positiver Eingang Multiplexer                    
16
  //ADCSRA =(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0);  // Teilungsfaktor 16MHz/128=125kHz                                      
17
  ACSR0A &=~(1<<ACD0);          // OK // Register ACSR0A - Analogkomparator einschalten = 0                  
18
  ACSR0B |=((1<<HSEL0)|(1<<HLEV0));    // OK // 50 mV Hysterese
19
                      // Register ACSR0B - HSEL0 = 0 - Hysterese ausgeschaltet
20
                      // Register ACSR0B - HSEL0 = 1 - Hysterese eingeschaltet
21
                      // Register ACSR0B - HLEV0 = 0 - Hysterese 20 mV
22
                      // Register ACSR0B - HLEV0 = 1 - Hysterese 50 mV
23
  ADMUXB |=(1<<GSEL0)|(1<<GSEL1);          // Einstellung Verstärkung
24
                      // GSEL0 + GSEL1 = 0 - Verstärkung 0
25
                      // GSEL0 = 1, GSEL1 = 0 - Verstärkung 20
26
                      // GSEL0 = 0, GSEL1 = 1 - Verstärkung 100
27
  ACSR0B |=(1<<ACOE0);          // Verbunden mit Ausgang
28
}
29
30
int main(void)
31
  {
32
   DDRA=0b00100001;      // Port A auf Ausgang schalten
33
   DDRB=0b00000011;      // Port B auf Ausgang schalten 
34
   PORTA=0b00000001;      // Port A auf aus
35
   PORTB=0b00000011;      // Port B auf aus   
36
    AnalogComparator();
37
    
38
    while(1)
39
    {
40
      if (ACSR0A &(1<<ACO0))  // Wenn der Analogkomparatorausgang eingestellt ist
41
        {
42
        //PORTA |=(1<<PINA0);          // LED 2 ein ok
43
        PORTA &=~(1<<PINA0);        // LED 2 aus 
44
      }
45
      else
46
      {
47
        //PORTA &=~(1<<PINA0);        // LED 2 aus ok
48
        PORTA |=(1<<PINA0);          // LED 2 ein 
49
      }
50
    _delay_ms(470);
51
    }
52
  }
Das ist der komplette Code. Ein paar Sachen sind auskommentiert. Im Bild 
oben ist die Schaltung

von c-hater (Gast)


Lesenswert?

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.

von Paul (Gast)


Lesenswert?

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?

von Paul (Gast)


Lesenswert?

1
ACSR0A |=(1<<ACPMUX2);
müste diese Zeile sein

von c-hater (Gast)


Lesenswert?

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
2
                      // Analoger Vergleicher Positiver Eingang Multiplexer

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...

von Paul (Gast)


Lesenswert?

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?

von Paul (Gast)


Lesenswert?

Sorry, habe das so übernommen ohne das D rauszustreichen, bin beim 
Komparator

von Paul (Gast)


Lesenswert?

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.

von Paul (Gast)


Lesenswert?

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

von c-hater (Gast)


Lesenswert?

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.

von c-hater (Gast)


Lesenswert?

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...

von Paul (Gast)


Lesenswert?

Danke für den Hinweis

von Paul (Gast)


Lesenswert?

Habe das ganze auf den AC1 umgeschrieben (nicht geklaut)
1
void AnalogComparator()
2
  {
3
  ACSR1A &=~(1<<ACD1);          // OK // Register ACSR1A - Analogkomparator 1 einschalten = 0    
4
  ACSR1A &=~(1<<ACBG1);          // Auswahl der Bandlücke
5
  ACSR1A |=(1<<ACO1);            // Analoger Komparatorausgang
6
  ADMUXA |=0x34;              // Wahl Eingang - U/2=ADC2, Regler=ADC3 - 110100                  
7
  ACSR1B |=((1<<HSEL1)|(1<<HLEV1));    // AC1 - 50 mV Hysterese
8
                      // Register ACSR1B - HSEL1 = 0 - Hysterese ausgeschaltet
9
                      // Register ACSR1B - HSEL1 = 1 - Hysterese eingeschaltet
10
                      // Register ACSR1B - HLEV1 = 0 - Hysterese 20 mV
11
                      // Register ACSR1B - HLEV1 = 1 - Hysterese 50 mV
12
  //ADMUXB |=(1<<GSEL0)|(1<<GSEL1);    // Einstellung Verstärkung
13
                      // GSEL0 + GSEL1 = 0 - Verstärkung 0
14
                      // GSEL0 = 1, GSEL1 = 0 - Verstärkung 20
15
                      // GSEL0 = 0, GSEL1 = 1 - Verstärkung 100                  
16
  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?

von c-hater (Gast)


Lesenswert?

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.

von Apollo M. (Firma: @home) (majortom)


Lesenswert?

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

von Paul (Gast)


Lesenswert?

Was kostet die Stunde bei dir?

von Paul (Gast)


Lesenswert?

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?

von Heide Witzka (Gast)


Lesenswert?

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.

von Paul (Gast)


Lesenswert?

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.

von Manni (Gast)


Lesenswert?

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

von Manni (Gast)


Lesenswert?

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

von Paul (Gast)


Angehängte Dateien:

Lesenswert?

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

von Paul (Gast)


Lesenswert?

Sorry, vergessen, arbeite mit AVR Studio in windows. Sollte sich 
vertragen

von Paul (Gast)


Lesenswert?

Kalte Füsse bekommen. Jemand anderes Intresse?

von Manni (Gast)


Lesenswert?

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

von Manni (Gast)


Lesenswert?

He Paul

Kein Interesse mehr?

mfg

Manni

von Paul (Gast)


Lesenswert?

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

von Manni (Gast)


Lesenswert?

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

von Manni (Gast)


Lesenswert?

Hallo Paul

Bist Du nun interessiert oder sind meine Anforderungen zu hoch?

Eine entsprechende Antwort wäre schön....

mfg

Manni

von Paul (Gast)


Lesenswert?

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

von Manni (Gast)


Lesenswert?

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

von Paul (Gast)


Lesenswert?

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

von Manni (Gast)


Lesenswert?

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

von Schmierenkomödiant (Gast)


Lesenswert?

Manni

Du bist einer der größten Schauspieler, die die Welt bisher 
hervorgebracht hat.

Respekt. Oder nee: Überhaupt keinen Respekt.

von Manni (Gast)


Lesenswert?

Schmierenkomödiant

Dein Nickname sagt Alles über Dich aus

von Rainer V. (a_zip)


Lesenswert?

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

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.