LCDs und GLCDs anschließen und ansteuern (BASCOM)

EADOGM 162 über SPI in Bascom

Hallo Leute,

habe hier das 162 von EADOG und will es nun ansteuern.
Das ganze soll über SPI laufen was jedoch scheinbar mit bascom
anders als mit 4/8bit nicht direckt möglich ist.

Daher meine Frage: Gibt es doch irgenteine Möglichkeit das Display
über SPI mit den vorhandenen Bascom-befehlen anzusteuern?

PS: Eine selbstimplementierte Lösung habe ich berreits gefunden, is aber nich ganz einfach...

Gruß:
AVRuser
 
Hallo AVRuser!

Wenn das Display über eine SPI-Schnittstelle verfügt, dann kannst du es doch SPIOUT ansteuern.
Wo ist jetzt genau dein Problem? :hmmmm:
Um welchen Dispalytyp handelt es sich eigentlich (Link zum Datenblatt?) ?

Grüße,
Cassio
 
Hallo AVRuser!

Das bedeutet also, du hast eine Möglichkeit gefunden das Display anzusteuern und es funktioniert.

Du kannst aber damit in BASCOM zum Beispiel nicht schreiben:
Locate 1 , 1
Lcd "Hallo !"

Es funktioniert damit also kein LOCATE und auch kein LCD, wie du es sonst verwendest?

Ich kenne deine Ansteuerung ja nun nicht, aber ich würde an deiner Stelle eine Subroutine schreiben und dies dann mit ähnlichen Befehlen realisieren.
Zum Beispiel:
Locate_ 1 , 1
Lcd_ "Hallo !"

Wäre das nicht eine Möglichkeit?

Grüße,
Cassio
 
Hallo Cassio,

Natürlich ist es kein Problem die Subroutinen so zu bennenen,
aber es hätte ja sein können das ich nur den Befehl/Lib nicht finde...

PS: Ich benutze die Vollversion 1.11.9.9

Gruß:
AVRuser
 
KS0073 Icons

Ich habe nur schnell überflogen. Aber hier zeige ich euch mein Video. Kommt noch, muss hochladen

Hier ist das Video http://www.youtube.com/watch?feature=player_embedded&v=6XSO_D7XmYU

Hier Codeabschnitt
Code:
Do
Cls
Locate 1 , 1 : Lcd "Telefon" : Lcdicon Lcd_icon_telefon , Lcd_icon_ein : Wait 1
Lcdicon Lcd_icon_telefon , Lcd_icon_aus : Cls
Locate 1 , 1 : Lcd "Klingel" : Lcdicon Lcd_icon_klingel , Lcd_icon_ein : Wait 1
Lcdicon Lcd_icon_klingel , Lcd_icon_aus : Cls
Locate 1 , 1 : Lcd "Brief" : Lcdicon Lcd_icon_brief , Lcd_icon_ein : Wait 1
Lcdicon Lcd_icon_brief , Lcd_icon_aus : Cls
Locate 1 , 1 : Lcd "Datei" : Lcdicon Lcd_icon_datei , Lcd_icon_ein : Wait 1
Lcdicon Lcd_icon_datei , Lcd_icon_aus : Cls
Locate 1 , 1 : Lcd "Sanduhr" : Lcdicon Lcd_icon_sanduhr , Lcd_icon_ein : Wait 1
Lcdicon Lcd_icon_sanduhr , Lcd_icon_aus : Cls
Locate 1 , 1 : Lcd "Computer" : Lcdicon Lcd_icon_computer , Lcd_icon_ein : Wait 1
Lcdicon Lcd_icon_computer , Lcd_icon_aus : Cls
Locate 1 , 1 : Lcd "Diskette" : Lcdicon Lcd_icon_diskette , Lcd_icon_ein : Wait 1
Lcdicon Lcd_icon_diskette , Lcd_icon_aus : Cls
Locate 1 , 1 : Lcd "Thermometer" : Lcdicon Lcd_icon_thermometer , Lcd_icon_ein : Wait 1
Lcdicon Lcd_icon_thermometer , Lcd_icon_aus : Cls
Locate 1 , 1 : Lcd "Uhr" : Lcdicon Lcd_icon_uhr , Lcd_icon_ein : Wait 1
Lcdicon Lcd_icon_uhr , Lcd_icon_aus : Cls
Locate 1 , 1 : Lcd "Lautsprecher" : Lcdicon Lcd_icon_lautsprecher , Lcd_icon_ein : Wait 1
Lcdicon Lcd_icon_lautsprecher , Lcd_icon_aus : Cls
Locate 1 , 1 : Lcd "Pfeil links" : Lcdicon Lcd_icon_links , Lcd_icon_ein : Wait 1
Lcdicon Lcd_icon_links , Lcd_icon_aus : Cls
Locate 1 , 1 : Lcd "Pfeil rechts" : Lcdicon Lcd_icon_rechts , Lcd_icon_ein : Wait 1
Lcdicon Lcd_icon_rechts , Lcd_icon_aus : Cls
Locate 1 , 1 : Lcd "Pfeil oben" : Lcdicon Lcd_icon_hoch , Lcd_icon_ein : Wait 1
Lcdicon Lcd_icon_hoch , Lcd_icon_aus : Cls
Locate 1 , 1 : Lcd "Pfeil unten" : Lcdicon Lcd_icon_runter , Lcd_icon_ein : Wait 1
Lcdicon Lcd_icon_runter , Lcd_icon_aus : Cls
Locate 1 , 1 : Lcd "Info" : Lcdicon Lcd_icon_info , Lcd_icon_ein : Wait 1
Lcdicon Lcd_icon_info , Lcd_icon_aus : Cls
Locate 1 , 1 : Lcd "Batterie leer" : Lcdicon Lcd_icon_batterie , Lcd_icon_bat_0 : Wait 1
Lcdicon Lcd_icon_batterie , Lcd_icon_aus : Cls
Locate 1 , 1 : Lcd "Batterie 25%" : Lcdicon Lcd_icon_batterie , Lcd_icon_bat_1 : Wait 1
Lcdicon Lcd_icon_batterie , Lcd_icon_aus : Cls
Locate 1 , 1 : Lcd "Batterie 50%" : Lcdicon Lcd_icon_batterie , Lcd_icon_bat_2 : Wait 1
Lcdicon Lcd_icon_batterie , Lcd_icon_aus : Cls
Locate 1 , 1 : Lcd "Batterie 75%" : Lcdicon Lcd_icon_batterie , Lcd_icon_bat_3 : Wait 1
Lcdicon Lcd_icon_batterie , Lcd_icon_aus : Cls
Locate 1 , 1 : Lcd "Batterie 100%" : Lcdicon Lcd_icon_batterie , Lcd_icon_bat_4 : Wait 1
Lcdicon Lcd_icon_batterie , Lcd_icon_aus : Cls
Loop
 
Hallo!

Na, sieht doch super aus!
Jetzt kannst du die Symbole vom Display auch passend verwenden. :)

Was beim Code noch fehlt ist die Ansteuerroutinen der Symbole.
Es steht immer nur der Hinweis auf LCDICON aber mehr nicht.
Kannst du bzw. magst du die Subroutine dafür hier auch noch mal einstellen?
Irgendwie nützt einem nur das Aufrufen der Routine nicht viel. :wink:

Gruß und Gratulation,
Cassio
 
Ich habe Code von Peter Tuch übernommen und abgeändert. http://crycode.de/avr/allg/30-anschluss-eines-text-lcd ganz unten scrollen.

Es wird ein PCF8574 benötigt.
lcd_i2c_e2.lib ins LIB herunterladen - http://crycode.de/files/bascom/lcd_i2c_e2.lib

lcd_ks0073_i2c.bas herunterladen - http://crycode.de/files/bascom/lcd_ks0073_i2c.bas

Hier meine Code und Video. Brief-Icon ein, blinken und aus

http://www.youtube.com/watch?v=tKU1Y59sZ8c

Code:
'                                        EA DIP204B-6NLW
'                                        *-------------*
'                            GND---------|VSS          |
'                            +5V---------|VDD          |
'              PCF8574     10K-POTI------|VCI          |
'            *---------*                 |             |
'PORTC.0-----|SCL    P0|-----------------|D4           |
'PORTC.1-----|SDA    P1|-----------------|D5           |
'GND---------|A0     P2|-----------------|D6           |
'GND---------|A1     P3|-----------------|D7           |
'GND---------|A2     P4|-----------------|RS           |
'            |       P5|-----------------|R/W          |
'+5V---------|VDD    P6|                 |             |
'GND---------|VSS    P7|-----------------|E            |
'            *---------*   +5V---[47]----|A            |
'                            GND---------|C            |
'                                        *-------------*


$regfile = "m32def.dat"                                     ' ATMega32
$crystal = 4000000                                          ' 4MHz Takt
$hwstack = 100                                              ' wir brauchen größere Stacks
$swstack = 100
$framesize = 100

Config Scl = Portc.0                                        'I2C SCL Pin
Config Sda = Portc.1                                        'I2C SDA Pin

Declare Sub Brief_ein
Declare Sub Brief_blink
Declare Sub Brief_aus

'Lib für LCD über I2C einbinden
$lib "lcd_i2c_e2.lib"

'Variablen die für die LCD I2C Lib benötigt werden
Dim _lcd_e As Byte , _lcd_e2 As Byte
'LCD im 4-Bit Modus betreiben
_lcd_e = 128
'Hintergrundbeleuchtung (PCF8574 P6) einschalten, 0 = aus 64 = ein
_lcd_e2 = 64

'Adresse des PCF8574(A)P festlegen
Dim Pcf8574_lcd As Byte
Pcf8574_lcd = &H40

'Funktionen für den LCD-Controller einbinden
$include "lcd_ks0073_i2c.bas"

'LCD initialisieren
' (nicht mit dem Bascom Initlcd, sondern mit einer Routine für den LCD-Controller)
Lcdinit

' Icons anzeigen lassen

Wait 2

Do
Call Brief_ein
Call Brief_blink
Call Brief_aus
Loop
End

' Tabellen zur Zeichenersetzung für das LCD mit KS0073 Controller
Lcdzeichen_ascii:
Data 176% , 64% , 178% , 179% , 167% , 36% , 128% , 124% , 181% , 228%
Data 196% , 246% , 214% , 252% , 220% , 223% , 126% , 132% , 94% , 92%

Lcdzeichen_ks0073:
Data 128% , 160% , 130% , 131% , 95% , 162% , 7% , 218% , 143% , 123%
Data 91% , 124% , 92% , 126% , 94% , 190% , 206% , 34% , 29% , 251%

'--------------------------------------------------------------------Subroutinen
Sub Brief_ein
Lcdicon Lcd_icon_brief , Lcd_icon_ein
Locate 1 , 1 : Lcd "Brief-Icon"
Locate 3 , 7 : Lcd "  ein  "
Wait 1
End Sub

Sub Brief_blink
Lcdicon Lcd_icon_brief , Lcd_icon_blink
Locate 1 , 1 : Lcd "Brief-Icon"
Locate 3 , 7 : Lcd "blinken"
Wait 3
End Sub

Sub Brief_aus
Lcdicon Lcd_icon_brief , Lcd_icon_aus
Locate 1 , 1 : Lcd "Brief-Icon"
Locate 3 , 7 : Lcd "  aus  "
Wait 1
End Sub
 
Test GLCD JHD240128D mit T6963 Controler

Hallo Liebe AVR Gemeinde

Möchte mich nun auch mal wieder zu Worte melden und meinen Erfolg mit dem JHD240128D hier einstellen.
Ich bin nach Tage langen Versuchen, das Display zum laufen zubringen, fast verzweifelt.:confused:
Durch den Beitrag #97, #98 und #119 habe ich dann mal den Daten-Port getauscht (von PortA auf PortB) und siehe da es zeigt was es soll.:dance3:
Ich habe den Datenport bei einem Atmega32 mit 16 MHz auf Port A gelegt und den Control Port auf Port C, außer einem weißen Balken
der kurz aufflackerte war nichts zu sehen. Habe darauf hin die Komplette Verdrahtung noch Mals abgeräumt und wieder aufgebaut,
Ohne Erfolg. Dann im großen I recherchiert, auch ohne Erfolg.
Es ist wohl kein bekanntes Problem das der PortA beim AVR nicht als Datenport für GLCD's funktioniert.
Neuuser und Grandpa hatten dieselben Probleme. :confused:
Ich Frage mich ob Datenleitungen und Controlerleitungen hinter einander, z.B. PortB und PortC, liegen müssen. ???:confused:
Nun wünsche ich euch noch ein schönes Osterfest.

Gruß Ralf
IMG_2631.jpgIMG_2633.jpg
Code:
$regfile = "m32def.dat"
$crystal = 16000000
$hwstack = 128
$swstack = 128
$framesize = 128


Config Graphlcd = 240 * 128 , Dataport = Portb , Controlport = Portc , Ce = 2 , Cd = 3 , Wr = 0 , Rd = 1 , Reset = 4 , Fs = 5 , Mode = 6
Cursor Off
Cls

Dim X As Byte , Y As Byte

Wait 1

Do


 Cls
 Locate 2 , 1
 Lcd "Ralf Neubert, Logger @ AVR-Praxis Forum"
 Locate 4 , 9
 Lcd "Hallo AVR-Praxis Forum"
 Locate 6 , 2
 Lcd "TEST GLCD JHD240128D LED erfolgreich "
 Locate 13 , 2
 Lcd "Controler T6963C, 240x128 Punkte "
 Locate 15 , 12
 Lcd "WWW.AVR-Praxis.de"
 Locate 11 , 6
 Lcd "Treiber IC KS0086"
 Wait 4

'Line(0 , 0) -(239 , 127) , 255
'Line(0 , 127) -(239 , 0) , 255
 Line(0 , 0) -(240 , 0) , 255
 Line(0 , 127) -(239 , 127) , 255
 Line(0 , 0) -(0 , 127) , 255
 Line(239 , 0) -(239 , 127) , 255

 Wait 1

 Boxfill(5 , 64) -(233 , 74) , 1
 Boxfill(6 , 65) -(232 , 73) , 0

 For X = 6 To 232
 Locate 8 , 16 : Lcd X
 Waitms 50

 Boxfill(6 , 65) -(x , 73) , 1
 Next


 Wait 2


 For X = 0 To 240
 Locate 8 , 22 : Lcd X
 Waitms 100
  Pset X , 20 , 255

 Next



 For X = 0 To 140

  Pset X , 127 , 255

 Next
 Waitms 1000
 For X = 1 To 64 Step 5
 Circle(120 , 64) , X , 255
 Waitms 100
 Circle(120 , 64) , X , 0
 Waitms 100
 Next
 Waitms 1000
 For X = 1 To 64
 Circle(120 , 64) , X , 255
 Waitms 100
 Next
 Wait 3


 Cls Graph
 Wait 5

 Cls Text
 Cls
 Locate 8 , 14
 Lcd "Test Ende"
 Wait 4

 Loop

End
 
Hallo Logger!

Glückwunsch, zum nächsten Display das funktioniert! :)

Warum hast du denn Probleme mit dem PORT.A gehabt? :hmmmm:
Ich nehme den PORT.A eigentlich ganz gerne als Display-Datenport, weil er nur den ADC als Alternative hat und ich den eigentlich nicht benötige.
Bis jetzt hat bei mir eigentlich auch jedes Display am PORT.A funktioniert.

Man muss beim Anschließen eigentlich nur beachten, dass die Bits ggf. "entgegengesetzt" angeordnet sind.
Allerdings ist das auf einem Breadboard meistens auch egal. :wink:

Schon seltsam.... :hmmmm:
aber nun funktioniert es ja. :cool:


Glückwunsch und Grüße,
Cassio
 
Hallo,

am Mega32 hatte ich auch mal ein Problem. Da waren bei mir aber auch lediglich die Port-Pins vertauscht. Und man muß beim Mega32 daran denken das die JTAG-Pins über die Fuse JTAGEN ausgeschaltet werden wenn mal wieder PortC nicht so will wie er soll.
Also normalerweise sollten alle Ports sauber funktionieren.

Ich hab hier allerdings noch einen Mega8535 rumfliegen bei dem ein Pin vom PortD verreckt ist :p (PortD.4)

Gruß
Dino
 
Hallo Cassio, Hallo Dino03

Ich habe keine Erklärung dafür warum der PortA nicht Funktionierte.
Benutzt wird ein STK500 Board, da steckte es auf PortA habe es dann nur um gesteckt auf PortB,
umprogrammiert und es Funktioniert. PortC habe ich gelassen.
Um es nochmal auf PortA zu testen steckte ich es jetzt wieder um und es Funktioniert.???:confused:
:confused: :confused: :confused:

Keine erklärung.

Gruß Ralf
 

Anhänge

  • IMG_2636.jpg
    IMG_2636.jpg
    253,7 KB · Aufrufe: 49
Um es nochmal auf PortA zu testen steckte ich es jetzt wieder um und es Funktioniert.???:confused:
:confused: :confused: :confused:
Keine erklärung.
ich würde sagen ... irgendein Fehler der übersehen wurde oder ein Wackler oder sowas.
Kann einem schön viel Zeit und Nerven kosten ;)

Gruß
Dino
 
Hallo Dino

Versuche mich nebenbei auch ein bisschen in Assembler, (Anfänger) kannst du mir irgend welche Tipps zum erlernen geben, Bücher, I Seiten u.s.w.
So das nur neben bei. In meiner Sammlung von LCD's und GLCD's ist noch ein PG24064LRU-GNN-H Laut Datenblatt ist es ein Serielles GLCD.
Da ich mit Seriellen Displays noch keine erfarung habe, meine frage wie Steuere ich diese an ? RS232 ?
Hänge das Datenblett mal hinten an.

Gruß Ralf




Anhang anzeigen pg24064g.pdf
 
Hi Ralf,

Versuche mich nebenbei auch ein bisschen in Assembler, (Anfänger) kannst du mir irgend welche Tipps zum erlernen geben, Bücher, I Seiten u.s.w.
Von Atmel gibt es ein "8-bit AVR Instruction Set Manual". Da sind alle Assembler-Befehle, Adressierungs-Modi mit kurzen Beispielen erklärt. Außerdem gibt es in der Hilfe des AVR-Studios einen Abschnitt mit den Assembler-Directiven (.org, ...) und was sie bedeuten. Das ist recht hilfreich wenn man das offen oder sogar ausgedruckt hat.
Klasse ist auch der Wissensbereich vom RoboterNetz. Hier im Forum ist im FAQ-Bereich aber auch einiges zu finden. Oder schau dir mal einfach einige Quellcodes hier aus dem Forum an und sieh dir an wie es aufgebaut ist und was man wie machen kann.

So das nur neben bei. In meiner Sammlung von LCD's und GLCD's ist noch ein PG24064LRU-GNN-H Laut Datenblatt ist es ein Serielles GLCD.
Da ich mit Seriellen Displays noch keine erfarung habe, meine frage wie Steuere ich diese an ? RS232 ?
Hänge das Datenblett mal hinten an.
Genau, wieder zurück zum Thema ;) ... Bei dem Display muß ich dich enttäuschen. Ja es ist seriell. Aber wohl nicht so wie du es verstanden hast. Es hat keine serielle Schnittstelle. Es besitzt nämlich gar keinen Controller. Du mußt die Pixeldaten also ähnlich wie bei einem Monitor dauernd anliefern. Ich hab hier auch noch welche mit 400 x 64 Pixel. Richtig große Teile die wohl mal in einer Schreibmaschine waren. Die liegen hier auch seit Jahren rum und warten auf Strom. Irgendwann hab ich die mal hinterhergeschmissen bekommen (superbillig). Tja ... nicht wiederstehen können und nun liegen sie rum. Trotz der schönen Optik, der Größe und dem superbilligen Preis war es objektiv betrachtet rausgeschmissenes Geld.

Gruß
Dino
 
Hallo

Danke für die Tipps, werde Sie nach und nach mal durch arbeiten.:moil:
Zu dem GLCD 240x168 versuche ich gerade eine Bargraph anzeige zu Programmieren und damit eine Temperatur dar zu stellen.:pcguru:
Mit dem Seriellen Display komme ich auch nicht weiter, im großen I gibt es zwar ein paar Assembler Codes aber die sagen mir nichts.
Werde es erst mal beiseite legen, habe den Vorteil das die meisten Displays aus dem Elektronikschrott sind und somit nichts kosten.
Sie nehmen nur platz weg.:)

Gruß Ralf
 
Hi Ralf,

Mit dem Seriellen Display komme ich auch nicht weiter, im großen I gibt es zwar ein paar Assembler Codes aber die sagen mir nichts.
Werde es erst mal beiseite legen, habe den Vorteil das die meisten Displays aus dem Elektronikschrott sind und somit nichts kosten.
Sie nehmen nur platz weg.:)
zum seriellen Display ... sieh mal hier ...
- LCD Controller für 640x480 LCD mit mega8515
- Grafikfähiger LCD Controller für 320x240 LCD mit 4 Graustufen
Das ist ein Display in das man die Pixeldaten Punkt für Punkt und Zeile für Zeile in ein Schieberegister eitakten muß. Zusätzlich muß man die Synchron und Phasensignale erzeugen. Das sind alles zeitkritische Signale die eingehalten werden müssen wenn man keinen Pixelsalat sehen möchte. Außerdem benötigst du genug Speicher um den gesamten Displayinhalt abzulegen. Du mußt also einen GLCD-Controller mit einem Atmel nachbauen.

Ich hab auch ne Menge Displays aus Altgeräten oder dem Schrott recyclet :cool:

Gruß
Dino
 
Hi Dino

Danke für die Info, habe jetzt jede menge zum Lesen und Lernen.
Nur die Zeit die fehlt.
Das mit den Bargraph-Anzeigen hat auch Funktioniert wie man sieht.
Wenn den angehängten Code mal jemand durch sehen würde, es gibt bestimmt noch was zu verbessern.
Sollten einige Programm-Segment bekannt vor kommen, sie sind aus dem Buch von Burkhard Kainka.

Gruß Ralf


IMG_2643.jpg

Code:
'*******************************************************************************
'*                                                                             *
'* Grundprogramm mit PWM-Ausgabe Timer 1 und 2 Teperaturmessungen mit DS1820   *
'* Es wird mit Timer Interupts Programmiert                                    *
'* Mit GLCD JHD240128D                                                         *
'* Ralf Neubert Dinslaken                                                      *
'* www.AVR-Praxis.de                                                           *
'* Version vom 12.04.2012                                                      *
'*                                                                             *
'*******************************************************************************

 $regfile = "m32def.dat"
 $crystal = 16000000

 '$baud = 19200

 $hwstack = 128                                             ' default use 32 for the hardware stack
 $swstack = 128                                             'default use 8 for the SW stack
 $framesize = 128                                           'default use 24 for the frame space


 Config Graphlcd = 240 * 128 , Dataport = Porta , Controlport = Portc , Ce = 2 , Cd = 3 , Wr = 0 , Rd = 1 , Reset = 4 , Fs = 5 , Mode = 6
 Cursor Off
 Cls

 Config Timer0 = Timer , Prescale = 64
 Config Timer1 = Pwm , Prescale = 8 , Pwm = 10 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Down

'*******************************************************************************

 Locate 2 , 1
 Lcd " Ralf Neubert,Logger @ AVR-Praxis Forum"
 Locate 4 , 10
 Lcd "Hallo AVR-Praxis Forum"
 Locate 6 , 3
 Lcd "TEST GLCD JHD240128D LED erfolgreich "

 Start Timer0
 On Ovf0 Timer0isr

'*******************************************************************************

 Enable Timer0
 Enable Interrupts

'*******************************************************************************

 S1 Alias Pind.2                                            'Taster 0  Eingabe Pwm up
 S2 Alias Pind.3                                            'Taster 1  Eingabe Pwm down
 S3 Alias Pind.6                                            'Taster 2  Eingabe LED 1 Start/Stop
 S4 Alias Pind.7                                            'Taster 3  Eingabe LCD Clear screen
 Out1 Alias Portb.2                                         'LED 0     Ausgabe Dauerlicht
 Out2 Alias Portb.3                                         'LED 1     Ausgabe Blinkt

' Pin für 1wire Schnittstelle festlegen

 Config 1wire = Portb.0                                     'Belegung aussenfühler,pin1=Weiß-GND,pin2=Grün-Data,pin3=Grau-VDD
 Config Portd = &B00110000                                  'PortD. = 0,1,2,3,6,7 Eingang  = 4,5 PWM Ausgang
 Config Portb = &B00001100                                  'PortB. = 0,1,4,5,6,7 Eingang  = 2,3 Ausgang für LED's

'*******************************************************************************

 Dim Pwma As Integer
 Dim Pwmb As Integer
 Dim Ticks As Byte
 Dim Sw1 As Byte
 Dim Sw2 As Byte
 Dim Sw3 As Byte
 Dim Sw4 As Byte
 Dim Pwm1 As Integer
 Dim Pwm1old As Integer
 Dim Ledtimer As Byte
 Dim Ledblink As Byte

'*******************************************************************************
'PWM1 wert aus EEprom lesen

 Readeeprom Pwm1 , &H20

'*******************************************************************************
'Für die Temperaturmessung

 Dim T1 As Integer                                          'hilfs Variable für die berechnung Temp1
 Dim T2 As Integer                                          'hilfs Variable für die berechnung Temp1
 Dim T3 As Integer                                          'hilfs Variable für die berechnung Temp2
 Dim T4 As Integer                                          'hilfs Variable für die berechnung Temp2
 Dim T5 As String * 5                                       'Variable für Temp1 zur anzeige auf dem LCD
 Dim T6 As String * 5                                       'Variable für Temp2 zur anzeige auf dem LCD
 Dim T7 As Single                                           'hilfs Variable für die berechnung Temp1
 Dim T8 As Single                                           'hilfs Variable für die berechnung Temp2
 Dim Id1(8) As Byte                                         'für die adresse Sensor 1
 Dim Id2(8) As Byte                                         'für die adresse Sensor 2
 Dim Ar1(9) As Byte
 Dim Ar2(9) As Byte
 Dim I As Byte , Tmp1 As Byte , Tmp2 As Byte
 Dim W As Byte

'*******************************************************************************
'

 Dim Tx As Integer
 Dim Txold As Integer
 Dim Ty As Integer
 Dim Tyold As Integer
 Dim Xold As Integer
 Dim Pwmx As Integer

'*******************************************************************************
'Constanten festlegen

 'Constante1 = 506                                           '479
 'Con2 = 0.0978                                              '0.0978
 Const Timer0_reload = 224                                  'Wert für 1ms

'*******************************************************************************
'1wire Bus absuchen

 W = 1wirecount()
  Id1(1) = 1wsearchfirst()
   Id2(1) = 1wsearchnext()
    'Print W
     For W = 1 To 8
      'Print Hex(id1(w));
       Next
        'Print
         For W = 1 To 8
          'Print Hex(id2(w));
           Next
            'Print
'*******************************************************************************

Portd.2 = 1
Portd.3 = 1
Portd.6 = 1
Portd.7 = 1
Ledblink = 1

 Boxfill(0 , 64) -(201 , 74) , 1
  Boxfill(0 , 88) -(201 , 98) , 1
   Boxfill(0 , 112) -(201 , 122) , 1

'*******************************************************************************
'Hauptschleife

Do

'Temperaturen Convertieren

   1wreset
    1wwrite &HCC
    1wwrite &H44
    Ddrb.0 = 1
      Waitms 800
    Ddrb.0 = 0

'*******************************************************************************
'Innen-Temperatur Berechnen

 1wreset
  1wwrite &H55
  1wwrite Id1(1) , 8
  1wwrite &HBE
   Ar1(1) = 1wread(9)
    1wreset
     Tmp1 = Ar1(1) And 1
     If Tmp1 = 1 Then Decr Ar1(1)
     T1 = Makeint(ar1(1) , Ar1(2))
     T1 = T1 * 50
     T1 = T1 - 25
     T2 = Ar1(8) - Ar1(7)
     T2 = T2 * 100
     T2 = T2 / Ar1(8)
     T1 = T1 + T2
     T1 = T1 / 10
   Tx = T1
     T7 = T1 / 10
     T5 = Fusing(t7 , "###.#" )

     Tx = Tx / 5
     Tx = Tx + 50
        If Tx < 1 Then Tx = 0
         If Tx > 200 Then Tx = 200

      Boxfill(0 , 89) -(tx , 97) , 1
      Boxfill(tx , 89) -(200 , 97) , 0
'*******************************************************************************
'Außen-Temperatur Berechnen

 1wreset
  1wwrite &H55
  1wwrite Id2(1) , 8
  1wwrite &HBE
   Ar2(1) = 1wread(9)
   1wreset
     Tmp2 = Ar2(1) And 1
     If Tmp2 = 1 Then Decr Ar2(1)
     T3 = Makeint(ar2(1) , Ar2(2))
     T3 = T3 * 50
     T3 = T3 - 25
     T4 = Ar2(8) - Ar2(7)
     T4 = T4 * 100
     T4 = T4 / Ar2(8)
     T3 = T3 + T4
     T3 = T3 / 10
   Ty = T3
     T8 = T3 / 10
     T6 = Fusing(t8 , "###.0" )

   Ty = Ty / 5
    Ty = Ty + 50
     If Ty < 1 Then Tx = 0
      If Ty > 200 Then Tx = 200
       Boxfill(0 , 113) -(ty , 121) , 1
        Boxfill(ty , 113) -(200 , 121) , 0



'*******************************************************************************

      Pwmx = Pwm1 / 5
        If Pwmx < 1 Then Pwmx = 0
         If Pwmx > 200 Then Pwmx = 200

      Boxfill(0 , 65) -(pwmx , 73) , 1
      Boxfill(pwmx , 65) -(200 , 73) , 0

    Xold = Pwmx


'*******************************************************************************

   Locate 8 , 1
     Lcd "PWM:"
     Locate 8 , 5
     If Pwm1 < 1000 Then Lcd " ";
      If Pwm1 < 100 Then Lcd " ";
       If Pwm1 < 10 Then Lcd " ";
         Lcd Pwm1

'*******************************************************************************
     Locate 11 , 1
       Lcd "Innen: " ; T5 ; "'C"
      Locate 14 , 1
        Lcd "Aussen: " ; T6 ; "'C"

        If Ticks = 1 Then Out1 = 1
       If Ticks = 5 Then Out1 = 0

 Loop

End

'*******************************************************************************
'Timer Intrupt auswertung

 Timer0isr:

  Ticks = Ticks + 1

'*******************************************************************************

  If Ticks = 1 Then

     If S1 = 0 Then Sw1 = Sw1 + 1 Else Sw1 = 0
      If Sw1 > 100 Then Sw1 = 100

     If S2 = 0 Then Sw2 = Sw2 + 1 Else Sw2 = 0
      If Sw2 > 100 Then Sw2 = 100

     If S3 = 0 Then Sw3 = Sw3 + 1 Else Sw3 = 0
      If Sw3 > 100 Then Sw3 = 100

     If S4 = 0 Then Sw4 = Sw4 + 1 Else Sw4 = 0
      If Sw4 > 100 Then Sw4 = 100

  End If

'*******************************************************************************

  If Ticks = 2 Then


     If Sw1 = 3 Then
       Pwm1 = Pwm1 + 10
        If Pwm1 > 1020 Then Pwm1 = 1020
     End If

     If Sw1 = 100 Then
       Pwm1 = Pwm1 + 10
        If Pwm1 > 1020 Then Pwm1 = 1020
     End If

     If Sw2 = 3 Then
       Pwm1 = Pwm1 - 10
        If Pwm1 < 0 Then Pwm1 = 0
     End If

     If Sw2 = 100 Then
       Pwm1 = Pwm1 - 10
        If Pwm1 < 0 Then Pwm1 = 0
     End If

     If Pwm1 <> Pwm1old Then
        Writeeeprom Pwm1 , &H20
     End If

     Pwm1a = Pwm1
     Pwm1old = Pwm1


  End If

'*******************************************************************************

  If Ticks = 3 Then

     If Sw3 = 3 Then
        If Ledblink = 1 Then
          Ledblink = 0
           'Print W
        Else
          Ledblink = 1
        End If
     End If
  End If

'*******************************************************************************

  If Ticks = 4 Then

     Ledtimer = Ledtimer + 1
      If Ledtimer > 100 Then Ledtimer = 0
       If Ledtimer = 1 Then
        If Ledblink = 1 Then Out2 = 1
     End If

     If Ledtimer = 50 Then Out2 = 0
     End If

'*******************************************************************************

 If Ticks = 5 Then



 End If

'*******************************************************************************

  If Ticks = 6 Then

    If Sw4 = 3 Then Cls

    End If
'*******************************************************************************

  If Ticks = 10 Then Ticks = 0


Return


End
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)