Hier sind wie versprochen ein Bild und der fertige Code.
(Die Option vier Sensoren abzufragen und mit dem Taster durchzuschalten ist noch nicht ganz fertig aber sonst funktioniert es einwandfrei).
Schaltplan:
https://www.roboternetz.de/phpBB2/al...hp?pic_id=2485
Bild:
https://www.roboternetz.de/phpBB2/al...hp?pic_id=2484
Code:$regfile = "M8def.dat" $crystal = 4000000 '--------Segmente--------------- Config Portd = Output Portd = 1 'anfangs alles aus '----------Anode Display--------- Config Portb = Output Digit1 Alias Portb.1 Digit2 Alias Portb.2 Digit3 Alias Portb.3 Digit4 Alias Portb.4 Dp Alias Portb.5 Portb = 1 'auch hier alles aus '---------------Taster------------ Config Pind.7 = Input Pind.7 = 1 'Taster Alias Pind.7 '---------AD-Wandler Config------------- Config Adc = Single , Prescaler = Auto , Reference = Avcc Start Adc '--------Timer Config---------------- Dim Stelle As Byte 'Umschaltung zehner/einer/grad_zeichen Stelle = 1 'start mit Zehner Config Timer0 = Timer , Prescale = 64 On Timer0 Timer_routine 'wird 4.000.000/64/256 ~ 244 mal pro Sekunde aufgerufen Enable Timer0 Enable Interrupts 'Declare Sub Naechste Dim Messung As Integer Dim Wert_stelle(4) As Byte 'Variable für die einzelnen Stellen im Array(3) Dim I As Byte 'Variable für Ausgabe der einzelnen Zeichen Dim Temp As Integer 'Variable für Temperatur nach Berechnung Dim Segmente(12) As Byte 'Variable für einzelne Segmente jeder Ziffer Dim Messung2 As Integer 'für Minuszeichen Dim Messpunkt As Byte Messpunkt = 0 Const Offset = 150.5 Restore Segment_daten 'Tabelle der Zeichen laden For I = 1 To 12 Read Segmente(i) Next I Wert_stelle(3) = 11 '°fest auf Stelle 3 Wert_stelle(4) = 12 'minus fest auf Stelle 4 Do 'If Taster = 0 Then Gosub Naechste Messung = Getadc(messpunkt) * 64 'Messung des ADC in Variable(Messung) speichern und mit 64 multiplizieren Messung = Messung / 101 'Messung mit 101 dividieren Messung = Messung - Offset Temp = Messung / 10 'für direkte Temperaturanzeige 150 abziehen 'ganzahlige Division, also 47 / 10 = 4 Wert_stelle(1) = Temp + 1 Temp = Messung Mod 10 'Mod ergibt den Rest der Division, also bei 47 / 10 ist Mod = 7 Wert_stelle(2) = Temp + 1 Messung2 = Getadc(messpunkt) If Messung2 < 237 Then Portb.0 = 1 'wenn getadc(0) kleiner als 237 (0°) dann minus an If Messung2 > 237 Then Portb.0 = 0 Waitms 1000 'hier vielleicht noch eine kleine Pause - um pendeln zwischen 2 temperaturen zu reduzieren Loop End Timer_routine: Portb.stelle = 1 'Vorherige Stelle ausschalten Portd = 1 'zusätzlich alle Segmente aus Incr Stelle 'auf nächste Stelle umschalten If Stelle = 5 Then Stelle = 1 'am Ende wieder zurück zur ersten Stelle Portd = Segmente(wert_stelle(stelle)) 'Neue Segmente ausgeben Portb.stelle = 0 'neue Stelle einschalten Return 'Sub Naechste 'Incr Messpunkt 'If Messpunkt = 2 Then Messpunkt = 0 'End Sub Segment_daten: 'gemeinsame Anode: ' 0 1 2 3 4 5 6 7 8 9 'Data &H3F , &H6 , &H05B , &H04F , &H066 , &H06D , &H07D , &H7 , &H7F , &H6F 'gemeinsame kathode: ' 0 1 2 3 4 5 6 7 8 9 grad minus Data &H40 , &H79 , &H24 , &H30 , &H19 , &H12 , &H02 , &H78 , &H00 , &H10 , &B10011100 , &B1011







Zitieren

Lesezeichen