Bascmo adc messen und verarbeiten :)

  • hi


    ich möchte für mein zimmer eine led beleuchtung basteln :)
    da ich schon einige kleine sachen mit atmegas gebastelt habe möchte ich auch dieses projekt mit einem AVR realisieren ...
    die hardware ist soweit schon fertig ... bloss an der software hängts jezt ^^


    unzwar habe ich an dem adc einen LDR dran welcher logischerweise die helligkeit misst ...
    die leds werde vorerst einfach über high und low gesteuert pwm kommt später ...


    nun meine frage :
    wie genau stelle ich das an das bei einer bestimmten spannung ein port auf high oder low geschaltet wird .
    der werte bereicht liegt bei 3-5v und als referenz nutze ich aref mit 5v .


    were cool wenn ihr mir nen code schnipsel oder eine geeignete seite senden könnt wo man sich darüber schlau machen könnte .


    vielen dank im vorraus :)


    Grüße

  • Willkommen im Forum.
    Was willst du wissen? If, Then, Else ist ja Basic Standard, darum wird es wohl nicht gehen. oder?
    Wie man den AD-Wandler konfuguriert und ausliest steht in der Bascom Hilfe - und für alles weitere müsste man schon wissen:
    Welchen µC
    Wie verdrahtet
    Wie sieht der bisherige Code aus.....


    ...und wo zu Teufel ist meine Glaskugel hin :D

  • das ging ja schnell :)
    also :
    genuzt wird ein atmega 8 mit 16mhz , programmiersprache bascom ^^
    hab 3 verschiedene farbstreifen welche über relais vom atmega angesteuert werden :)


    wie eine if abfrage gemacht wird is klar .. wie der adc configuriert wird auch ABER ich weiss nich wonach ich bei der if abfrage nachfrage soll


    also auf deutsch : wenn adc pin1 gleich 5v dann schalte pin5 auf high
    wenn adc pin1 gleich 3,3v dann schalte pin7 auf high
    wenn adc pin1 gleich 2v dann schalte pin 6 auf high
    der rest ist soweit kein proplem ^^

  • Hi,


    Naja die Spannungswerte die am ADC Eingang anliegen werden im Controller gewandelt, z.B. 10-Bit auflösung.
    Danach hast du eben Wertigkeiten von 0 - 1023.


    Code
    Dim ldrvalue As Word
    
    
    Config Adc = Single , Prescaler = Auto 	 
    Start Adc
    
    
    ldrvalue = Getadc(1)


    Nun solltest du die Spannungswerte am ADC1 in der Variablen ldrvalue haben.
    ldrvalue muss als Word definiert werden, da die Auflösung mit 10-Bit über die 255 eines Bytes hinausgeht.


    Die Auswertung kannst du z.B. über Select Case vornehmen


    Code
    Select Case ldrvalue
        Case 1 To 50 ' Dieser Bereich ist wie gewünscht auszulegen, im Beispiel wird bei Digitalen Werten von 1 bis 50 dieser Case ausgeführt
          ' hier kommt dein genialer Code rein z.B. eine LED anmachen...
       Case 51 To 1023 ' Dieser Bereich ist wie gewünscht auszulegen, im Beispiel wird bei Digitalen Werten von 51-1023 dieser Case ausgeführt
          'hier kommt dein genialer Code rein, z.B. eine LED ausmachen...
       End Select


    Um die Bereiche auslegen zu können, wo welche LED Schalten soll, kannst du wie folgt vorgehen:


    5V / Auflösung (256 bei 8-Bit oder 1024 bei 10-Bit) = kleinster messbarer Spannungsschritt


    Beispiel: 2,5V / kleinster messbarer Spannungsschritt = 2,5V als Digitaler Wert


    Gruß Flo

  • Hi,


    soll das Programm wirklich nur bei 2 volt pin6 auf high schalten ? Oder von 0-2 V, 2-3,3V ud 3,3-5 Volt


    Und dein ADC misst von 0-5V und hat dabei 10 bit, d.h. werte von 0-1024 0= 0V, 1024= 5V


    Also ein bisschen mehr Informationen brauchen wir schon, dann wird dir hier auch sehr schnell geholfen.


    Grüße Jakob


    Zu langsam

  • Wenn das Programm nur bei einen bestimmten Wert auf High schalten soll, dann gehts damit. Die 700 sind ein Beispielwert, kann je nach LDR natürlich schwanken.



    Allerdings ist die Variante von Stromflo schon um einges eleganter, aber zum verstehen ist das allemal gut. Eventuell hängst du noch ein kleines LCD an den Mega8, dann kannst du dir den Wert für W in Echtzeit anzeigen lassen und so genau eine Schaltschwelle festlegen, bei der dein Relais schalten soll. Achja, vergiss die Freilaufdiode nicht, sonst kanns dir einiges zerhauen ;)

  • vielen dank :)


    hier mal der code :



    mir is grad aufgefallen das ich zwar den portb.1-3 nen neuen namen gegeben habe aber ich es in der case abfrage garnicht genuzt habe :D :D :D


    is sonst der code soweit ok ?