Forum: Mikrocontroller und Digitale Elektronik Wie schreib ich ein Comparator in C Code?


von Christian S. (Firma: DSK) (schmiddy)


Lesenswert?

hi, hab ein problem ein comparator für unser programm zu scheiben. wir 
benutzen den 
Atmega2561(http://www.shop.display3000.com/pi12/pi2/pd43.html)
und habe´n keine ahnung wie man ein solches programm schreibt da dies 
totales neuland für uns ist.
zu unserer aufagbe: wir solln jeweils zwei spannungen mit dem 
mikrocontroller vergleichen,
1. 2,5V SOLL zustand --> IST wert größer als SOLL --> Ausgang von 0 auf 
1
2. 3,5V SOLL zustand --> IST wert größer als SOLL --> Ausgang von 0 auf 
1
dann gibt es noch ein kleines problem der controller hat nur einen 
comperator auf PortE.2 positiv input und PortE.3 negative input, wir 
brauchen aber zwei. also wenn irgendjemand einen tip für uns hat, wir 
wären sehr dankbar. MFG Schmiddy

von Berti (Gast)


Lesenswert?

das is ja nur ne if abfrage...

von Mike R. (thesealion)


Lesenswert?

Wie wäre es mit einem der AD-Kanäle, oder halt 2. Dann kannst du die 
Komperatoren beliebig in Software schreiben.

von Christian S. (Firma: DSK) (schmiddy)


Lesenswert?

ja sowas hab ich mir auch schon gedacht aber wie schreibt man einen 
comparator???
 ich hab noch keinen vernünftigen ansatzt gefunden der auch 
funktioniert...

von Christian S. (Firma: DSK) (schmiddy)


Lesenswert?

hat nicht jemand mal ein beispielprogramm in c code wie ein comparatar 
geschrieben ist?????

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Das ist simpelstes C, Vergleichen zweier Werte:


float ist;
float soll = 2.5;


ist = (irgendwie bestimmen);

if (ist > soll)
  Ausgang = 1;
else
  Ausgang = 0;


Möchtest Du vielleicht Deine Frage anders formulieren?

von Karl H. (kbuchegg)


Lesenswert?

wiederhole endlos {

     Lese ADCWert ein

     if ADCWert > Schwelle
       Schalte Led ein
     else
       Schalte Led aus
  }

von Komperatorschreiber (Gast)


Lesenswert?

if (Istwert > Sollwert) {
 Port = 1;
}

von Christian S. (Firma: DSK) (schmiddy)


Lesenswert?

ja das ist ja einleuchtend nur haben wir leider absolut keine ahnung wie 
wir die Ports da einbinden so dass das Programm die auch erkennt, es 
muss ja was mit den spannungen anfangen können die wir da anlegen.
Leider haben wir auch keine Unterlagen oder Beispielprogramme dazu, 
deswegen fragen wir... ;-)

von Marvin M. (Gast)


Lesenswert?

Tipps:

1. Herunterladen des Datenblattes bei www.atmel.com
2. Lesen
3. Lesen: 
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Analoge_Ein-_und_Ausgabe
4. In der Doku eures Boards nachschauen, an welchen Anschlüssen die 
analogen Eingänge herausgeführt werden.

Auch sinnvoll wäre vielleicht ein einfacheres Projekt? Wenn man keine 
Ahnung hat, macht es mehr Spaß, bei den Grundlagen anzufangen und nicht 
mittendrin.

von Christian S. (Firma: DSK) (schmiddy)


Angehängte Dateien:

Lesenswert?

ich erkläre euch mal kurz was wir vor haben....
also wir bekommen eine spannung von 0-50Volt die wir auf 1:10 mit 
widerständen begrenzt haben, also 0-5Volt für den microkontroller. bei 
einer spannung die ca. 1min über 2,5Volt liegt soll ein transistor 
angesteuert werden der eine steuerplatiene einschaltet, bei einer 
spannung von über 40Volt soll ein transistor angesteuert werden der 
lastwiderständer zum überlastschutz zuschaltet.
 wie schreibt man nun das pasende programm dazu???????

von Christian S. (Firma: DSK) (schmiddy)


Lesenswert?

sorry wir meinen natürlich nicht direkt 40 volt sonder eine spannung von 
über 4V da der controller ja nur 5V verpackt ;-)

von Karl H. (kbuchegg)


Lesenswert?

Christian Schmidt wrote:
>  wie schreibt man nun das pasende programm dazu???????

Genauso wie das oben in mehreren Variationen ausgeführt wurde.

Es wird euch wohl nichts anderes übrig bleiben, als
ins kalte Wasser zu springen und mal mit den Grundlagen
anzufangen.

http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial

von Christian S. (Firma: DSK) (schmiddy)


Lesenswert?

ja das ist schon richtig leider haben wir da aber keine zeit mehr zu...

von Karl H. (kbuchegg)


Lesenswert?

Christian Schmidt wrote:
> ja das ist schon richtig leider haben wir da aber keine zeit mehr zu...

Was erwartet ihr?

Das euch hier jemand das Programm schreibt?

Sicher nicht. Dazu gibt es das Tutorial. Dort sind Code-
sequenzen drinnen, die eigentlich ausreichen sollten, so daß
jemand der noch nie sowas programmiert hat, das in 1 bis 2
Stunden hinkriegt.
Soviel Zeit werdet ihr ja wohl haben. Ist ja schliesslich
keine Raketentechnik.

Wenn ihr konkrete Probleme und Schwierigkeiten im
Verständnis oder bei einem Codeausschnitt habt: Gerne.
Es gibt mindestens 10 Leute hier im Forum, die sofort
Gewehr bei Fuss stehen und weiterhelfen.
Aber von 0 beginnend: Nein.

von Christian S. (Firma: DSK) (schmiddy)


Lesenswert?

nein so sollte das eigentlich auch nicht rüber kommen. aber ich glaube 
auch nicht das einer der keine ahnung von dem hier hat dieses programm 
für unsern kontroller in zwei std. zu schreiben. wir haben schon ne 
woche dran gesessen um überhaupt etwas auf dem display zu schreiben. 
allerdings hatten wir da ein paar schwierigkeiten mit der Font anbindung 
und ettlichen anderen kleinen probleme...naja jetzt gehts ja und wenn 
wir das mit dem komparator noch hinkriegen sind wir fertig

von Niels H. (monarch35)


Lesenswert?

Font? Display? Nah, egal...

Wenn ich euch richtig verstehe, ist alles, was ihr wissen müsst, wie man 
eine AD-Wandlung vornimmt (also wert vom analogport einlesen) und wie 
man einen Portpin high/low schaltet.

Beides ist hier im Tutorial zu finden. Zumindest für AVRs.

von Karl H. (kbuchegg)


Lesenswert?

Niels Hüsken wrote:
> Font? Display? Nah, egal...

<Nicht für den OP gedacht>
Das Übliche.
Wir verbringen erst mal Stunden damit, irgendwelche Anzeigen
zu programmieren, so dass alles erst mal gut aussieht und
dann kümmern wir uns darum, dass das Pgm auch was Vernünftiges
macht. Mist: Wir haben soviel Zeit damit verbraucht mit der
Anzeige rumzuspielen, daß für die eigentliche Aufgabe keine
Zeit mehr bleibt. Bzw. Jetzt habe ich soviel Zeit in meine
Anzeigeroutinen gesteckt und ihr sagt mir jetzt, daß ich
die alle über Bord schmeißen kann, weil man das alles ganz
anders macht?

Findest du in comp.lang.c++ jeden Tag zu Dutzenden.

von Christian S. (Firma: DSK) (schmiddy)


Lesenswert?

ja ganz genau wir wollen gerne wissen wie man ein AD-Wandler vornimmt, 
mit analogwerte einlesen und wie man ein portpin high/low schaltet. wenn 
du mir das mal zeigen oder erklären könnntest wäre ich dir sehr 
dankbar.....

von Karl H. (kbuchegg)


Lesenswert?

Was davon im Tutorial verstehst du nicht?

http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Analoge_Ein-_und_Ausgabe

Da mögen eventuell das eine oder andere Detail nicht genau
genug beschrieben sein, aber ausführlicher als dort wird es
dir hier auf die Schnelle keiner erklären können.

Und als Krönung des ganzen: Da findest sich sogar eine
fix fertige C Funktion, die du nur einbauen musst um den
ADC auslesen zu können. Aber lies um Himmels Willen die
Beschreibung. Ohne die wirst du nicht verstehen was in
der Funktion warum passiert.

Du kannst auch mal hier
http://www.mikrocontroller.net/articles/AVR-Tutorial:_ADC
nachlesen. Eventuell ergänzt das eine oder andere Detail
die Beschriebung im C Tutorial. Den Assembleranteil am Ende
der Seite kannst du ja ignorieren.

von Karl H. (kbuchegg)


Lesenswert?

Zum Thema Ausgabeport setzen

http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Zugriff_auf_Ports

Auch hier wieder: Wenn noch Fragen offen bleiben, dann stelle
sie. Aber lies dir das erst mal durch.

Und: Du solltest mit einiger Sicherheit hiermit anfangen.
Die ADC Geschichte ist etwas umfangreicher als einen
Portpin auf 0 oder 1 zu setzen.

von Mario R. (mario001) Benutzerseite


Lesenswert?

Wie kann man ein komplexes (wegen Font) Display ansteuern, wenn man 
nicht mal weiß, wie man einen einzelnen Port befummelt ? grübel

von *test* test _. (Firma: *keine* /Firma/) (testaccounta)


Lesenswert?

what about:
1
while(1)PORTX.B=!(soll<ist);   //;-D

von Christian S. (Firma: DSK) (schmiddy)


Angehängte Dateien:

Lesenswert?

jo danke leute bin schon sehr viel weiter gekommen nur jetzt hab ich das 
problem das ich den adc nich richtig auslesen kann ich bekomme keinen 
wet auf dem lcd angezeigt

von Johannes M. (johnny-m)


Lesenswert?

Bitte BITTE BITTE keinen Code als Word-Dokument !

von Niels H. (monarch35)


Lesenswert?

Ich hab kein Word. Ich kann das Dokument nicht öffnen.

von Christian S. (Firma: DSK) (schmiddy)


Angehängte Dateien:

Lesenswert?

so hier hast du den asl txt document

von Niels H. (monarch35)


Lesenswert?

ADEN taucht in deinem Quelltext garnicht auf...

von Mike R. (thesealion)


Lesenswert?

Karl heinz Buchegger wrote:
> Niels Hüsken wrote:
>> Font? Display? Nah, egal...
>
> <Nicht für den OP gedacht>
> Das Übliche.
> Wir verbringen erst mal Stunden damit, irgendwelche Anzeigen
> zu programmieren, so dass alles erst mal gut aussieht und

Cool, das erinnert mich an einen Studiengang bei uns an der FH. Die IGIs
Internationales Studium Gestanltung und Design.
Das wichtigste war bei denen das Aussehen, ob es funktioniert hat, war 
Ihnen ziemlich egal. Hauptsache es sah gut aus.
Und sowas darf sich inter Dipl.-Ing. E-Technik nennen.

von Niels H. (monarch35)


Lesenswert?

Mike S. wrote:

> Und sowas darf sich inter Dipl.-Ing. E-Technik nennen.

Du glaubst garnicht, was ich schon alles gesehen hab, was sich Dipl.-Ing 
IT nennen darf. "Wie setz ich auf meiner Homepage einen Link? '<A ' und 
dann?"

von Karl H. (kbuchegg)


Lesenswert?

Christian Schmidt wrote:
> so hier hast du den asl txt document


Warum nicht einfach das *.c File so einstellen, wie es
ist? Also als *.c File?

Du hast kaum Arbeit damit, die Forensoftware kann damit ein
Syntax Highlighting machen.

Darf ich fragen, warum ihr die Funktion 'ReadChannel' aus dem
Tutorial nicht einfach so übernehmt, wie sie dort angegeben
ist? Per Cut&Paste von dort holen, in den Source Code
einsetzen, Funktion aufrufen und in 40 Sekunden habt ihr
einen funktionierenden ADC.
Nun ist natürlich nichts dagegen einzuwenden, wenn man die
Funktion danach abändert und an seine Bedürfnisse anpasst.
Aber es ist schon mal beruhigend, wenn man mit einer funktionierenden
Funktion loslegen kann.

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.