Bascom zwei ADC zu einen

Neuuser

Mitglied
11. Aug. 2008
465
0
16
Sprachen
Hallo Leute,
kann man zwei separat eingestellte ADC Eingänge zu einem zusammenfassen der dann beide übernimmt ?
Ich möchte ein Motor eine bestimmte zeit laufen lassen, der nach eine bestimmten zeit an geh,. diese müssen vorher über die zwei ADC (eingestellt) kalibriert werden so zu sagen, wen das geschehen ist sollen diese beide durch einen ADC übernommen werden.
Ich habe da ein Grundgerüst erstellt kann da jemand weiter helfen, es ist nur der Hauptteil vom Programm.

Kalibrierd werden vorher: Motor_an : und Motor_pause,
Motor_an und Pwm1a = Poti, sollen dann zusammen arbeiten.

Vielleicht steigt jemand durch was ich meine. ;)

Gruß Micha

Code:
Schritt1:

'Lüfter --------------------------------------------
Start Adc


Luft = Getadc(0)
Poti = Luft / 4
If Poti > 255 Then Poti = 100
[B]Pwm1a = Poti
[/B]
[B]Motor_an = Poti[/B]

'Pause des Förderschnecke -------------------------

M_p_zeit = Getadc(1)
Poti2 = M_p_zeit / 4
If Poti2 > 255 Then Poti2 = 250
[B]Motor_pause[/B] = Poti2

'Motor lauf zeit ----------------------------------


Lauf_zeit = Getadc(2)
Poti3 = Lauf_zeit / 4
If Poti3 > 255 Then Poti3 = 1
[B]Motor_an[/B] = Poti3


Motor_an = Motor_an / 20

If Motor_an > 0 Then
If Zeit = Motor_pause Then
  Motor = 1
  Wait [B]Motor_an[/B]
  Motor = 0
  Zeit = 0
  End If
  End If

If Tast1 = 0 Then
   Waitms 200
   Goto Schritt00
   Else
   End If


Goto Schritt1
 
Hi Micha,

Hallo Leute,
kann man zwei separat eingestellte ADC Eingänge zu einem zusammenfassen der dann beide übernimmt ?
Ich möchte ein Motor eine bestimmte zeit laufen lassen, der nach eine bestimmten zeit an geh,. diese müssen vorher über die zwei ADC (eingestellt) kalibriert werden so zu sagen, wen das geschehen ist sollen diese beide durch einen ADC übernommen werden.
Ich habe da ein Grundgerüst erstellt kann da jemand weiter helfen, es ist nur der Hauptteil vom Programm.

Kalibrierd werden vorher: Motor_an : und Motor_pause,
Motor_an und Pwm1a = Poti, sollen dann zusammen arbeiten.

Vielleicht steigt jemand durch was ich meine. ;)
ähhhh .... Nein :confused:
Irgendwie versteh ich nur ...
"Kann ich da auch 2x nen 5er Loch
bohren wenn ich nen 10er brauche?
Dann muß ich nicht umspannen."

also Bahnhof ... :vollkommenauf:
Das mußt du wohl nochmal langsam und im Detail erklären :rolleyes:

Gruß
Dino
 
Hallo Micha!

Als ich deinen Text die ersten beiden Male gelesen habe dachte ich, dass ich persönlich wohl zu doof dafür bin, das zu verstehen. :cool:
Dank Dino`s Beitrag weiß nun aber, dass ich damit nicht allein gewesen bin. :wink:


Ich habe leider auch nichts davon verstanden, was du da machen möchtest. :hmmmm:

Versuch es doch noch mal etwas andes und genauer zu beschreiben.

Grüße,
Cassio
 
Hallo dino u. Cassio,
ja scheiß Worte, darum der Satz drunter --Vielleicht steigt jemand durch was ich meine.--
Es ist aber auch nicht wirklich leicht das zu erklären, ich versuche es mal anders herum.
Es soll mittels Poti ein Lüfter geregelt werden, ( viel-wenig) --ist klar-- und gleichzeitig der lauf einer Förderschnecke die nur für ca. 1-12 sec. nach einer eingestellten pausen zeit an lauft, -- ist auch klar--
Das zusammen habe ich auch schon so gehabt das der Lüfter mit der lauf zeit zusammen zu regeln ist.
Aber, ich möchte das die Förderschneckenlaufzeit vorher zu der Lüftersdrehzahl über Poti ab geglichen werden kann, damit es richtig brennt.

Ich glaube es müsste über ein untermenue funktionieren, wo ich vorher den abgleich mache und dann im Hauptprogamm die Variable verwende.

gruß micha

darstellung.png
 
Hi,

also über ein Poti wird die Einschaltdauer einer Förderschnecke und die Geschwindigkeit eines Lüfters geregelt.
Wenn der Lüfter langsam läuft ist die Einschaltdauer der Schnecke bei 1s, bei schnellem Lüfter sind es 12s.

Ein weiteres Poti soll jetzt die Lüftergeschwindigkeit so verstellen können das damit sagen kann wie langsam oder wie schnell der Lüfter bei den 1s oder 12s laufen soll. (Der Abgleich) Das wird allerdings über ein einziges Poti schwierig einzustellen. Warum erklär ich etwas später im Text.

Das dritte Poti stellt dann Pausenzeiten zwischen den Laufzeiten (1..12s) der Schnecke ein.

Der Lüfter läuft also dauernd (Luftzufuhr zur Feuerstelle) und die Schnecke legt dann ab und zu mit einstellbaren Puls/Pausenzeiten ein wenig "Feuerholz" nach. Wobei die Pulszeiten und die Lüftergeschwindigkeit mit einem Regler verstellbar sein sollen.

So .. jetzt zu der justierung ...

Sagen wir mal beim Poti : Linksanschlag 1s , Rechtsanschlag 12s Pulszeit.
Wie willst du jetzt mit einem Poti sagen mit wieviel U/min der Lüfter am Linksanschlag und mit wieviel er am Rechtsanschlag drehen soll ? Entweder legst du eine mittlere Drehzahl fest und streckst dann nach unten und oben (also er dreht dann unten langsamer und oben schneller wenn du die justierung verstellst) oder du läst die untere Drehzahl identisch und streckst nur nach oben oder du läßt die obere Drehzahl fest und streckst nur nach unten. Bei allen drei Fällen wirst du entweder unten, oben oder an beiden Endanschlägen nicht das Optimum erzielen können.

Ich würde sagen du planst nen viertes Poti ein ...

1. Poti : Pausenzeit der Schnecke
2. Poti : Pulszeit der Schnecke (1..12s) und Min/Max-Drehzahl des Lüfters
3. Poti : Minimaldrehzahl des Lüfters
4. Poti : Maximaldrehzahl des Lüfters

Damit kann du dein Drehzahlband beliebig zur Pulszeit der Schnecke verschieben und strecken.

Dein Haupteinstellknopf für die Ofen/Kaminleistung wird dann also der Knopf für den Lüfter/Pulszeit sein. Die drei restlichen würde ich mit kleineren Knöpfen oder nur als Trimmer vorsehen damit man nicht versehentlich was verstellt.

Gruß
Dino
 
Ich würde sagen du planst nen viertes Poti ein ...

1. Poti : Pausenzeit der Schnecke
2. Poti : Pulszeit der Schnecke (1..12s) und Min/Max-Drehzahl des Lüfters
3. Poti : Minimaldrehzahl des Lüfters
4. Poti : Maximaldrehzahl des Lüfters


Hallo zusammen!

Wenn ich es richtig verstanden habe, dann könnte Micha ja auch alles mit einem Poti (oder einem Drehencoder) einstellen.

Es müsste nur ein Menü geben, dass den jeweiligen Punkt aufruft bzw. aktiviert......
dann wird der Wert mit dem Poti (oder doch besser einem Drehencoder?) eingestellt....
anschließend wird der Wert abgespeichert und fertig.

Das Menü selbst und die Bedienung hängt natürlich vom Rest der Steuerung ab..... ob mit oder ohne LCD. :wink:

Grüße,
Cassio
 
Hallo,

Wenn ich es richtig verstanden habe, dann könnte Micha ja auch alles mit einem Poti (oder einem Drehencoder) einstellen.
hab ich auch schon dran gedacht. Oder sogar mit Tastern (up/down).

Die Justierung und die Pausenzeiten dann im Menü nicht für jeden änderbar damit keiner dran rumspielt und die Heizleistung im "Hauptmenü" über den Drehencoder einstellbar. Anzeige über nen kleines LCD. Oder die Heizleistung über nen Poti mit großem Knopf und den Rest über Taster im Menü. Dann sieht man ohne Blick aufs LCD an der Stellung des Potiknopfes sofort die aktuelle Heizleistung.

Man könnte über den Controller dann auch gleich noch Parameter wie Temperatur, ... messen/ausgeben/aufzeichnen.

Gruß
Dino
 
Hallo Leute,
ja, hast du recht, dino, müssten dann 4 Potis ein, ich wollt der einfachhalber das LCD weglassen natürlich wäre dann es kein Problem die Justierung über Taster ein zu stellen und ab zu speichern. Die Steuerung soll für mein Bruder mit sein und den interessiert es wenig ob da steht wie warm und welche Einstellung das Programm gerade hat, Hauptsache ist bei ihn, das es funktioniert (brennt) ;)

Dein Haupteinstellknopf für die Ofen/Kaminleistung wird dann also der Knopf für den Lüfter/Pulszeit sein. Die drei restlichen würde ich mit kleineren Knöpfen oder nur als Trimmer vorsehen damit man nicht versehentlich was verstellt.

Genau so hatte ich mir das gedacht, nur der eine der dann von aßen zu regeln is,t die anderen auf der Platine zum einstellen.
Ich werde mir noch überlegen das teil doch über ein LCD ein zu stellen , dann ist das kein Problem , nur wen es über poti geht komme ich nicht mit klar.

gruß micha
 
Hallo Leute,
ich habe nun die Einstellung über Taster gemacht, es geht auch über die Potis, aber Taster lässt sich später schneller einstellen, das ganze sieht nun so aus.

gruß micha

Code:
Schritt0:

   
   If Tast1 = 0 Then
   Zeit = 0
   Motor_an = Motor_an + 5
   Writeeeprom Motor_an , 20
   Waitms 200

   If Motor_an => 160 Then
   Motor_an = 10
   Else
   End If
     End If

   If Zeit = 5 Then
   Cls
   Waitms 200
   Goto Schritt1
   Else
   End If

Goto Schritt0


Schritt1:

   Locate 1 , 1 : Lcd "Motor_an"
   Locate 1 , 12 : Lcd Motor_lauf
   

   Locate 2 , 1 : Lcd "Motor_pau"
   Locate 2 , 12 : Lcd Motor_pause ; 00
  


   If Tast2 = 0 Then
   Zeit = 0
   Motor_pause = Motor_pause + 10
   Writeeeprom Motor_pause , 30
   Waitms 200
   Else
   End If

   If Motor_pause => 110 Then
   Motor_pause = 10
   Else
   End If


Start Adc


   Luft = Getadc(0)
   Poti = Luft / 4
   If Poti > 255 Then Poti = 100
   Pwm1a = Poti
   Motor = Poti

   Motor = Motor - Motor_an
   Motor = Motor / 20

   Motor_lauf = Motor


If Motor_lauf > 0 And Getadc(0) > 40 Then
If Zeit = Motor_pause Then
  Motor1 = 1
  Wait Motor_lauf
  Motor1 = 0
  Zeit = 0
  Else
  If Getadc(0) < 40 Then
  Zeit = 0
  End If
   End If
     End If

   If Tast1 = 0 Then
   Zeit = 0
   Waitms 200
   Cls
   Goto Schritt0
   Else
   End If

  Locate 1 , 18 : Lcd Zeit
  Locate 2 , 17 : Lcd Motor
  Locate 1 , 1 : Lcd "Motor_an"
  Locate 1 , 12 : Lcd Motor_an

Goto Schritt1
 
Hallo Micha,
da ich kein großer Fan von Gotos bin, habe ich mal versucht zu verstehen, was dein Programm Schnipsel macht.
Ich denke, dass dies hier äquivalent ist:
Code:
Do

   Do
      If Tast1 = 0 Then
         Zeit = 0
         Motor_an = Motor_an + 5
         Writeeeprom Motor_an , 20
         Waitms 200

         If Motor_an => 160 Then
            Motor_an = 10
         Else
         End If
      End If
   Loop Until Zeit = 5                                      'das hier ist erste Abbruchbedingung

   Cls
   Waitms 200

   Do
      Locate 1 , 1 : Lcd "Motor_an"
      Locate 1 , 12 : Lcd Motor_lauf

      Locate 2 , 1 : Lcd "Motor_pau"
      Locate 2 , 12 : Lcd Motor_pause ; 00

      If Tast2 = 0 Then
         Zeit = 0
         Motor_pause = Motor_pause + 10
         Writeeeprom Motor_pause , 30
         Waitms 200
      Else
      End If

      If Motor_pause => 110 Then
         Motor_pause = 10
      Else
      End If

      Start Adc

      Luft = Getadc(0)
      Poti = Luft / 4
      If Poti > 255 Then Poti = 100                            'was soll das hier machen? Kann Poti überhaupt > als 255 werden?
      Pwm1a = Poti
      Motor = Poti

      Motor = Motor - Motor_an
      Motor = Motor / 20

      Motor_lauf = Motor

      If Motor_lauf > 0 And Getadc(0) > 40 Then
         If Zeit = Motor_pause Then
            Motor1 = 1
            Wait Motor_lauf
            Motor1 = 0
            Zeit = 0
         Else
            If Getadc(0) < 40 Then
               Zeit = 0
            End If
         End If
      End If

      Locate 1 , 18 : Lcd Zeit
      Locate 2 , 17 : Lcd Motor
      Locate 1 , 1 : Lcd "Motor_an"
      Locate 1 , 12 : Lcd Motor_an

   Loop Until Tast1 = 0                                     'das hier ist zweite Abbruchbedingung

   Zeit = 0
   Waitms 200
   Cls
Loop                                                        'dies läuft immer weiter

Den großen Vorteil in solch strukturierter Programmierung ist der, dass man die Intention häufig wesentlich besser erkennen kann. Dies sollte in meinem Code leicht zu erkennen sein. In deinem Programm sind die Teile durch die Gotos so verschlungen, dass man sich recht lange reindenken muss, um es zu verstehen.
Dein Code besteht im Prinzip aus zwei Blöcken:

Do
....'mache etwas
Loop Until Zeit = 5

Dies ist der erste Block. Nirgenwo in deinem Schnipsel wird Zeit auf einen anderen Wert als 0 gesetzt. Ich nehme mal an, dass es außerhalb irgendwo hochgezählt wird. Wenn dies zu schnell passiert, könnte es auch sein, dass Zeit schon =6 ist, wenn er das nächste mal an die Abfrage kommt. Dann geht es fleißig weiter. Wenn das nicht gewollt ist, solltest du es so machen

Loop Until Zeit >=5

Anschließend kommt der zweite Block:

Do
.... 'mache wieder etwas
Loop Until Tast1 = 0

Wenn Tast1=0 ist, fängt das Spiel wieder von vorne an. Bei mir sieht das jetzt so aus:

Do

Do
....'mache etwas
Loop Until Zeit = 5

Do
.... 'mache wieder etwas
Loop Until Tast1 = 0

Loop

Versuche doch mal, deine Absicht in solche Bascom Befehlsstrukturen zu bringen, dann ist es für dich und andere leichter, diese zu erkennen.
Schau dir auch mal die Kommentare an, die ich an einige Befehle gesetzt habe.

Grüße

Sebastian.
 
Drei Sachen mal so auf die Schnelle:
-ausgehend von den 8bit-AVR sind das üblicherweise 10bit ADC (wenn man ADLAR setzt, und nur das high-byte auswertet hat man nur noch 8bit.). Also wären max 1023 drin. Das ganze durch 4 geteilt also max 255. Wenn man aber nach der Division mit Hilfe des Carry rundet, sinds 256. (kA. wie Bascom so'ne Division handhabt.)
-Division durch 4 -> wäre nicht 2mal "nach rechts schieben" besser?
-die erste Schleife läuft 5x/Sekunde durch (solange die nicht weiter beschriebene Var "Zeit" im Moment des Tests der Abbruchbedingung gleich 5 ist). Wenn Tast1 gehalten wird, wird also (dann) jede Sekunde "motor_an" um 25 inkrementiert, und 5x dieselbe Zelle im EEPROM beschrieben. Wenn Du also zusammengenommen ca 5,5 Stunden die Taste gehalten hast, ist die garantierte Lebensdauer der Zelle erreicht. (maximal garantierte Anzahl der Schreibzyklen =100.000) Ahnliches gilt für die ander var in der zweiten Schleife. Ist is wirklich nötig, beide ständig im EEPROM zu aktualisieren?
(ansonsten fällt mir noch der konsequente Verzicht auf die integrierte Controller-Hardware ins Auge (Timer, IRQs), aber vielleicht werden die auch woanders im Programm belegt)
 
Hallo Sebastian ,
ja natürlich hab ich nicht das komplette Programm hoch geschoben, aber sollte ich mal lieber in der Zukunft machen.
Es ist immer schwierig bei anderen im Programm durch zu steigen, noch schlimmer wird es wie du schon sagst, wen es so wie hier mit Goto Anweisungen gemacht wird.
Einiges was du da siehst ergibt für euch kein Sinn, so wie der Taster der nur kurz was schaltet so lange wie man ihn hält, alles nur Gedanken Brücken die Anfang mit rein genommen, später verändert, oder auch noch raus genommen werden.

Mit dieser Goto Anweisung habe ich bisher nur eine Programm für einen Temperofen gemacht und bin sehr zufrieden bisher damit, diese Art der Do-
Loop Verknüpfung habe ich noch nicht probiert, aber könnte ich mal für das Programm probieren.

Code:
'was soll das hier machen? Kann Poti überhaupt > als 255 werden?

Also im Programm ist das kein Problem mit 255, sollte eine Begrenzung sein ist aber überflüssig und kann raus.

Stimmt, LotadaC die abspeichern im EEPROM sollte erst nach kompletter Fertigstellung der Anweisung passieren, aber es ist nicht so schlimm weil diese Action nur ein bis zwei mal zur Kalibrierung gemacht wird danach wird dieses übersprungen.

Aber das Programm hat sich im ganzen schon wieder komplett geändert ;)

gruß micha
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)