Ralf schrieb:Dinge, die die Welt nicht braucht oder Wie hell ist denn jetzt meine Nacht?
Wer sich immer schon über den Flaschenhals der Microcontroller geärgert hat, hier eine einfache Möglichkeit, Daten auszugeben.
![]()
Mittels eines Schieberegisters (IC Mitte) kann man eine 8-Bit-Variable bitcodiert (gelbe LED rechts) oder als Hex-Zahl (unten) anzeigen lassen. Außerden werden durch die weißen LEDs oben die Pegel der Ausgänge angezeigt (um genaue Spannungsteiler zu realisieren, dann man bei einem Pin diese Anzeige abschalten).
Auf der Steckplatine wird nur noch die externe Beschaltung realisiert, was das ganze wesentlich übersichtlicher macht.
Außerdem ist im Bereich des grünen Ovals links eine Funktion eingebaut, dass ein ausgeschalteter Rechner den Rest-Pin des Tiny nicht mehr auf low zieht.
Ralf
Da mich das auch mal interessierte aber das eigentlich wenig mit dem Reaktivlicht zu tun hat hab ich den Beitrag von Ralf einfach mal in einen neuen Thread kopiert.
Ich hab das mit einem AtMega32 und einem LCD-Display nachgemessen. Der AtMega hat auch einen AREF-Pin, da kann man direkt die Referenzspannung anlegen (also die 3V-Batterie). Das LCD ist ein 20x4-Display, hat also genug Platz um neben dem gemessenen Wert minimum, maximum und die Differenz anzuzeigen. Da ich LDR und Fototransistor vergleichen wollte hab ich die gleichzeitig gemessen und ausgegeben.
Code:
$regfile = "m32def.DAT"
$crystal = 1000000
Config Lcdpin = Pin , Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portc.6 , Db7 = Portc.7 , E = Portc.3 , Rs = Portc.2
Config Lcd = 20 * 4
Cls
Config Adc = Single , Prescaler = Auto , Reference = Off 'AVCC, INTERNAL, off (AREF)
Start Adc
Dim Ldr As Integer
Dim Ldrmax As Integer
Dim Ldrmin As Integer
Dim Ldrdiff As Integer
Dim Ldrold As Integer
Dim Ftt As Integer
Dim Fttmax As Integer
Dim Fttmin As Integer
Dim Fttdiff As Integer
Dim Fttold As Integer
Ldrmax = 0
Ldrmin = 1023
Fttmax = 0
Fttmin = 1023
Dim A As Byte
Config Portd = Output
Portd.6 = 1
Wait 1
Portd.6 = 0
Ldr = Getadc(6)
Ftt = Getadc(7)
Wait 1
For A = 1 To 100
Ldrold = Ldr
Ldr = Getadc(6)
Ldrdiff = Ldr - Ldrold
If Ldr > Ldrmax Then Ldrmax = Ldr
If Ldr < Ldrmin Then Ldrmin = Ldr
Fttold = Ftt
Ftt = Getadc(7)
Fttdiff = Ftt - Fttold
If Ftt > Fttmax Then Fttmax = Ftt
If Ftt < Fttmin Then Fttmin = Ftt
Cls
Lcd "A: " ; A ; "Max Min Diff"
Lowerline
Lcd "l " ; Ldr ; " " ; Ldrmax ; " " ; Ldrmin ; " " ; Ldrdiff
Thirdline
Lcd "f " ; Ftt ; " " ; Fttmax ; " " ; Fttmin ; " " ; Fttdiff
Wait 1
Next A
Wait 10
Die Beschaltung des LCD (14 Pin+15/16 mit Backlight) ist eigentlich standard:
- Pin 1: GND
- Pin 2: +5V
- Pin 3: Kontrast: Über einen 5K-Poti zwischen GND und 5V
- Pin 4: RS. PortC.2
- Pin 5: RW kommt an GND
- Pin 6: E, PortC.3
- Pin 7-10: (DB0-3): frei
- Pin 11-14: (DB4-7): PortC.4-7
... und als nächstes sollte ich den AtMega dann mal per SPI mit dem Tiny reden lassen, oder das ganze auf einen Tiny24 portieren ...