Hab hier mal n Democode für den SPI RTC-4553
Uhrenbaustein
Code:'---------------------------------------------------------- ' Programm initialisieren '---------------------------------------------------------- '$dbg ' ' ACHTUNG JTAG per Fuse abschalten !!!! ' ' SPI RTC an MISO MOSI CS0 = PortC.7 CS1 = PortC.6 RW = PortC.5 ' Habe noch SRF04 Ultraschallenfernungssensor an PortC.2 und PortC.3 ' Ist nicht besonders elegant gecodet, aber kann ja je nach Bedarf ' eventbasierend individuell umgebaut werden. ' ' Nur zur Verdeutlicheung der Grundfunktionen der RTC-4553 Uhrenfunktion $regfile = "m16def.dat" $crystal = 8000000 $baud = 19200 Declare Function Ultrasonic() As Integer ' Funktionen deklarieren Declare Function Spitransfer(byval Outbyte As Byte ) As Byte Dim A As Byte ' variablen deklarieren Dim I As Byte Dim X As Byte Dim Temp As Word Dim Tempint As Integer Dim Tempstr As String * 16 Enable Interrupts Config Pinc.2 = Output Config Pinc.3 = Input Config Portc.5 = Output Config Portc.6 = Output Config Portc.7 = Output ' Konstanten deklarieren Const Setyear = &B00001011 Const Setmonth = &B00001001 Const Setday = &B00000111 Const Sethour = &B00000100 Const Setminute = &B00000010 Rtcwr Alias Portc.5 Rtccs1 Alias Portc.6 Rtccs0 Alias Portc.7 Rtccs1 = 1 Rtccs0 = 0 ' SPI konfigurieren und initialisieren Config Spi = Hard , Interrupt = Off , Data Order = Lsb , Master = Yes , Polarity = Low , Phase = 0 , Clockrate = 4 , Noss = 0 Spiinit ' RTC-4553 initialisieren Rtcwr = 0 X = Spitransfer(&B00001111) 'c3 (Initialisierung) X = Spitransfer(&B00011101) 'c1 (Initialisierung) Rtcwr = 1 Do Tempstr = "" For A = &B00001100 To 0 Step -1 ' absteigende Reihenfolge X = Spitransfer(a) ' sena Anfrage X = Spitransfer(0) ' empfange Antwort X = X And &B11110000 Shift X , Right , 4 Tempstr = Tempstr + Str(x) ' Zahlenwert in String umwandeln und an String anreihen Next A I = Inkey() ' UART abfragen Select Case I ' Je nach Zeichen Funktion auslösen Case &H79: ' wenn y Rtcwr = 0 X = Spitransfer(setyear) Rtcwr = 1 Case &H6D: ' wenn m Rtcwr = 0 X = Spitransfer(setmonth) Rtcwr = 1 Case &H64: ' wenn d Rtcwr = 0 X = Spitransfer(setday) Rtcwr = 1 Case &H68: ' wenn h Rtcwr = 0 X = Spitransfer(sethour) Rtcwr = 1 Case &H69: ' wenn i Rtcwr = 0 X = Spitransfer(setminute) Rtcwr = 1 End Select Waitms 200 Print Tempstr ; " "; ' Ausgabe Datum und Uhrzeitstring Tempint = Ultrasonic() ' Entfernung per SRF04 messen Tempint = Tempint * 10 ' in cm umrechnen Tempint = Tempint / 62 Print Tempint 'Enfernung ausgeben Loop End Function Ultrasonic() As Integer Portc.2 = 0 Pulseout Portc , 2 , 20 Pulsein Ultrasonic , Pinc , 3 , 1 End Function Function Spitransfer(byval Outbyte As Byte) As Byte Spdr = Outbyte ' SPI-Ausgabe Do Loop Until Spsr.spif = 1 ' Warten bis Byte raus ist Spitransfer = Spdr ' Rückgabewert auslesen End Function End








Zitieren
Lesezeichen