hallo und guten morgen,
bin neu hier und auch neu bei microkontroller Programmierung, hab das ganze zwar vor gute 20 Jahren mal gelernt (8080 Prozessor) aber wer weiß noch was vor 20 jahren war.
durch die ct wordclock bin ich auf die atmega's gekommen und fasziniert was man damit tun kann.
also steckbrett und a bisserl Bauteile anschaffen und los geht's.
das avr Assembler tutorial bei uC habe ich mal durchgearbeitet bin dann aber zu bascom gekommen, verstehe ich einfach besser.
das objektorientierte kapier ich irgendwie nicht, vielleicht hat jemand auch dazu einen tipp.
Also so LED an aus blinken klappt gut.
nun hab ich ein altes LCD Display aus einem Telefon ausgebaut und oh wunder es tut.
also eine Tempanzeige bauen.
diese tut erstaunlich gut, nun wollte ich das Programm hier mal zerpflücken lassen, immerhin hat mir das lesen im Forum geholfen das ding zum laufen zu kriegen.
und da ihr euch mit dem Forum so viel mühe gebt, dürft ihr euch auch über mein Programm lustig machen.
die Funktion ist folgende, 2 temp fühler kty 81-220 per taste umschaltbar.
anzeige als zahl oder in Buchstaben ebenfalls per taster umschaltbar.
das ich die tasten ca. 1 sec drücken muss wegen dem wait im Loop ist mir klar aber eine viel besser lösung ist mir noch net eingefallen.
also bitte ohne scheu sagen was sche... ist, bin ja noch am üben.
gruß
bin neu hier und auch neu bei microkontroller Programmierung, hab das ganze zwar vor gute 20 Jahren mal gelernt (8080 Prozessor) aber wer weiß noch was vor 20 jahren war.
durch die ct wordclock bin ich auf die atmega's gekommen und fasziniert was man damit tun kann.
also steckbrett und a bisserl Bauteile anschaffen und los geht's.
das avr Assembler tutorial bei uC habe ich mal durchgearbeitet bin dann aber zu bascom gekommen, verstehe ich einfach besser.
das objektorientierte kapier ich irgendwie nicht, vielleicht hat jemand auch dazu einen tipp.
Also so LED an aus blinken klappt gut.
nun hab ich ein altes LCD Display aus einem Telefon ausgebaut und oh wunder es tut.
also eine Tempanzeige bauen.
diese tut erstaunlich gut, nun wollte ich das Programm hier mal zerpflücken lassen, immerhin hat mir das lesen im Forum geholfen das ding zum laufen zu kriegen.
und da ihr euch mit dem Forum so viel mühe gebt, dürft ihr euch auch über mein Programm lustig machen.
die Funktion ist folgende, 2 temp fühler kty 81-220 per taste umschaltbar.
anzeige als zahl oder in Buchstaben ebenfalls per taster umschaltbar.
das ich die tasten ca. 1 sec drücken muss wegen dem wait im Loop ist mir klar aber eine viel besser lösung ist mir noch net eingefallen.
also bitte ohne scheu sagen was sche... ist, bin ja noch am üben.
gruß
Code:
'Mein Temp Programm
'ATMEGA8 mit 4Mhz ext. Quarz
$regfile = "m8def.dat"
$crystal = 4000000
$hwstack = 22
$swstack = 22
$framesize = 100
Config Portd.0 = Input ' input Taster1 für zahlen oder text anzeige
Config Portd.1 = Input 'Taster1 für temp1 oder temp2 auswahl
Config Portc.5 = Output ' led für anzeige zahlen oder buchstaben
Config Portc.4 = Output 'led anzeige temp1 oder temp2
Config Portc.3 = Output ' weiß no net
Portc.5 = 1
Portc.4 = 1
Portc.3 = 0
'lcd an portb (20 * 1)
Config Lcdpin = Pin , Db4 = Portb.0 , Db5 = Portb.1 , Db6 = Portb.2 , _
Db7 = Portb.3 , E = Portb.5 , Rs = Portb.4
Config Lcd = 16 * 1
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Cursor Off , Noblink
Dim Taster1 As Bit ' flag ob Taster1 gedrückt
Set Taster1
Dim Taster2 As Bit ' flag ob Taster2 gedrückt
Set Taster2
Dim Aktuell As Word 'aktuell ausgelesene temp
Reset Aktuell
Dim Tempnow As Single 'jetzige temp
Tempnow = 20
Dim Tempvor As Single 'Temp Von Letzter Messung
Tempvor = 19
Dim Zahlen(50) As String * 15 'tabelle für zahlen werte in wörter
Dim Index As Integer
Index = 0
Dim Fuehler As Byte 'auswahl temp fühler
Fuehler = 1
' Worttabelle
Zahlen(1) = "Ein"
Zahlen(2) = "Zwei"
Zahlen(3) = "Drei"
Zahlen(4) = "Vier"
Zahlen(5) = "Fuenf"
Zahlen(6) = "Sechs"
Zahlen(7) = "Sieben"
Zahlen(8) = "Acht"
Zahlen(9) = "Neun"
Zahlen(10) = "Zehn"
Zahlen(11) = "Elf"
Zahlen(12) = "Zwoelf"
Zahlen(13) = "Dreizehn"
Zahlen(14) = "Vierzehn"
Zahlen(15) = "Fuenfzehn"
Zahlen(16) = "Sechszehn"
Zahlen(17) = "Siebzehn"
Zahlen(18) = "Achtzehn"
Zahlen(19) = "Neunzehn"
Zahlen(20) = "Zwanzig"
Zahlen(21) = "Einundzwanzig"
Zahlen(22) = "Zweiundzwanzig"
Zahlen(23) = "Dreiundzwanzig"
Zahlen(24) = "Vierundzwanzig"
Zahlen(25) = "Fuenfundzwanzig"
Zahlen(26) = "Sechsundzwanzig"
Zahlen(27) = "Siebundzwanzig"
Zahlen(28) = "Achtundzwanzig"
Zahlen(29) = "Neunundzwanzig"
Zahlen(30) = "Dreissig"
Zahlen(31) = "Einunddreissig"
Zahlen(32) = "Zweiunddreissig"
Zahlen(33) = "Dreiunddreissig"
Zahlen(34) = "Vierunddreissig"
Zahlen(35) = "Fuenfunddreisig"
Zahlen(36) = "Sechsunddreisig"
Zahlen(37) = "Siebunddreissig"
Zahlen(38) = "Achtunddreissig"
Zahlen(39) = "Neununddreissig"
Zahlen(40) = "Vierzig"
Zahlen(41) = "Einundvierzig"
Zahlen(42) = "Zweiundvierzig"
Zahlen(43) = "Dreiundvierzig"
Zahlen(44) = "Vierundvierzig"
Zahlen(45) = "Fuenfundvierzig"
Zahlen(46) = "Sechsundvierzig"
Zahlen(47) = "Siebundvierzig"
Zahlen(48) = "Achtundvierzig"
Zahlen(49) = "Neunundvierzig"
Start Adc 'adc starten
Do ' temp auslesen
Aktuell = Getadc(fuehler) ' faktor kty 81-220
Tempnow = Aktuell * 0.633 '-offset die temp stimmt ungefähr (reicht auch)
Tempnow = Tempnow - 250
'ausgabe nur wenn sich temp ändert
If Tempnow <> Tempvor Then Gosub Ausgabe
Tempvor = Tempnow
If Pind.0 = 0 Then Gosub Anzeige_taste 'abfrage ob taste 1
If Pind.1 = 0 Then Gosub Fuehlerauswahl 'abfrage ob taste 2
Wait 1 'warten damit nicht so oft gemessen wird
Loop
'Ende des Programms
End
Ausgabe:
'temp als byte
Index = Tempnow ' display leer
Cls
If Taster1 = 0 Then Lcd Zahlen(index) ; " " ; "Grad" ' wenn anzeige zahlen dann zahlen
If Taster1 = 1 Then Lcd "Temperatur = " ; Fusing(tempnow , "#.#") ; " C" ; Chr(223) 'wenn anzeige buchstaben dann buchstaben
Return
Anzeige_taste:
Waitms 50 ' kurz warten entprellen ???
If Pind.0 = 0 Then Toggle Taster1 ' anzeige flag umstellen
If Pind.0 = 0 Then Gosub Changeanzeige 'anzeige ausgeben
Return
Fuehlerauswahl:
'led umschalten
Toggle Portc.4 'wenn fuehler 0 dann 1 und andersrum
If Fuehler = 0 Then
Fuehler = 1
Else
Fuehler = 0
End If
Aktuell = Getadc(fuehler)
Tempnow = Aktuell * 0.633 'neue temp anzeigen
Tempnow = Tempnow - 250
If Tempnow <> Tempvor Then Gosub Ausgabe
Tempvor = Tempnow
Return
Changeanzeige: 'neue temp anzeigen
Cls
If Taster1 = 0 Then Lcd Zahlen(index) ; " " ; "Grad"
If Taster1 = 1 Then Lcd "Temperatur = " ; Fusing(tempnow , "#.#") ; " C" ; Chr(223)
Toggle Portc.5
Return