Das inzwischen recht beliebte Experimentierboard RN-Mega8 liegt nun auch in der Version 1.4 vor. Einige kleine Details wurden aufgrund praktischer Erfahrungen der Bastler noch verbessert. So kann jetzt die Referenzspannung genau per Spindeltrimmer gewählt werden, was noch mehr Experimente erlaubt.
Zudem müssen auch keine LED´s mehr per Jumper deaktiviert werden wenn man analoge Ports nutzt, weiteres alles in der ebenfalls aktuallisierten Anleitung.
Die Änderungen machen eine geringfügige Anpassung des Demoprogramms notwendig. Hier also das aktuelle Demo für die Revision 1.4:
Code:
'###################################################
'rnmega8test_rev1.4.BAS (c) 2005
'für
'RoboterNetz Board RN-MEGA8 nur für Version 1.4 der Platine
'Das neue preiswerte Entwicklungsboard zum experimentieren
'
'Aufgabe:
' Dieses Testprogramm testet gleich mehrere Eigenschaften auf dem Board
' Den verschiedenen Tasten sind bestimmte Funktionen zugeordnet
' Taste 1: Zeigt Batteriespannung über RS232 und LCD an
' Taste 2: Gibt per Zufall einen Lottozahlentip ab - 6 aus 49
' Taste 3: Einige male Lauflicht über ein Balken-LED´s (2 Ports bleiben an, da dies RS232 Ports sind)
' Bei einer LED kommt es zu leichtem Knacksen, da der Piepser diesen Port ebenfalls nutzt
' Taste 4: Ein einfaches Sirenengeräusch
''Taste 5: Zeigt Copyriht auf LCD Display
' Im Gegensatz zu vorherigen RN-Mega8 Revisionen können bei der
' Version 1.4 die LED´s auch dann aktiviert bleiben, wenn die
' AD Ports 0 bis 3 verwendet werden. Diese Ports werden nicht mehr per LED
' überwacht. Die LED´s sind nun an einigen anderne Ports angeschlossen, siehe
' aktuelle Dokumentation
' Jumper JREF (Referenzspannung=5V) muss bei diesem Demo gesteckt sein.
' Bei veränderter Referenzspannung / Bestückung muss Tastenabfrage angepaßt werden
' Sehr gut kann man aus dem Demo auch entnehmen wie Sound ausgegeben wird,
' wie Tasten abgefragt werden und wie Subroutinen und Funktionen angelegt werden
'Autor: Frank
'Weitere Beispiele und Beschreibung der Hardware
'unter http://www.Roboternetz.de oder robotikhardware.de
'Eigene Programmbeispiele sind im Roboternetz gerne willkommen!
'##############################################################
Declare Sub Batteriespannung()
Declare Sub Lauflicht()
Declare Function Tastenabfrage() As Byte
Declare Sub Textauflcdausgeben()
Declare Sub Lottozahlen()
Declare Sub Sirene()
$regfile = "m8def.dat"
Dim I As Integer
Dim N As Integer
Dim Ton As Integer
Dim Ws As Word 'Wird für Messung bei Tastenabfrage verwendet
Dim Adc_ohne_taste As Word
$crystal = 16000000 'Quarzfrequenz
'$crystal = 7372800 'Quarzfrequenz
$baud = 9600
Config Scl = Portc.5 'Ports fuer IIC-Bus
Config Sda = Portc.4
Config Adc = Single , Prescaler = Auto , Reference = Off 'Für Tastenabfrage und Spannungsmessung
Config Pinc.0 = Input 'Für Tastenabfrage
Portc 0# = 1 'Pullup Widerstand ein
Start Adc
Const Ref = 5 / 1023 'Für Batteriespannungsberechnung
'Bei einer anderen Referenzspannung muss die 2.5 durch entsprechend ersetzt werden
'Die Referenzspannung wird durch den Jumper JPREF bzw. Spindeltrimmer festgelegt
Dim Taste As Byte
Dim Volt As Single
Config Pind.6 = Output
Portd 0.6 = 0
I2cinit 'Falls I2C benutzt wird
' Falls ein LCD Display angeschlossen ist
Dim ___lcdno As Bit
Config Lcdpin = Pin , E = Portc.3 , E2 = Portd.7 , Rs = Portc.2 , Db4 = Portd.2 , Db5 = Portd.3 , Db6 = Portd.4 , Db7 = Portd.5
Config Lcd = 40 * 4
I = 0
Sound Portb.0 , 400 , 450 'BEEP
Sound Portb.0 , 400 , 250 'BEEP
Sound Portb.0 , 400 , 450 'BEEP
Print
Call Textauflcdausgeben
Adc_ohne_taste = Getadc(0) 'Messe Spannung wenn keine Taste gedrückt ist
Adc_ohne_taste = Adc_ohne_taste - 2 'für Toleranz abziehen
Do
Taste = Tastenabfrage()
If Taste <> 0 Then
Select Case Taste
Case 1
Call Batteriespannung 'Taste 1 Zeigt Bateriespannung über RS232 an
Case 2
Call Lottozahlen 'Gibt Lottozahlen-Tip (ohne Gewähr) über RS232 und lcd
'Bei Gewinn bitte mit Autor Frank teilen :-)
Case 3
Call Lauflicht 'Einige male Lauflicht über Balken LED´s anzeigen
Case 4
Call Sirene
Case 5
Call Textauflcdausgeben
End Select
Sound Portb.0 , 400 , 500 'BEEP
End If
Waitms 100
Loop
End
'Diese Unterfunktion fragt die Tastatur am analogen Port ab
Function Tastenabfrage() As Byte
Tastenabfrage = 0
Ton = 600
Ws = Getadc(0)
' Print "ws=" ; Ws
If Ws < Adc_ohne_taste Then
Select Case Ws
Case 400 To 440
Tastenabfrage = 1
Ton = 550
Case 330 To 370
Tastenabfrage = 2
Ton = 500
Case 260 To 300
Tastenabfrage = 3
Ton = 450
Case 180 To 230
Tastenabfrage = 4
Ton = 400
Case 100 To 130
Tastenabfrage = 5
Ton = 350
Case Else
Print "Bitte Tastenabfrage an Messert ws="; Ws; " anpassen!"
End Select
Sound Portb.0 , 400 , Ton 'BEEP
End If
End Function
'Diese Unterfunktion zeigt Bateriespannung an
Sub Batteriespannung()
Local W As Word
Start Adc
W = Getadc(1)
Volt = W * Ref
Volt = Volt * 5.3137 'Spannungsteiler (R9+R10)/R9
Print "Die aktuelle Spannung beträgt: "; Volt; " Volt"
Print "Rev: "; Ref; " W="; W
'Auch auf LCD ausgeben
___lcdno = 0
Cls
Locate 1, 1
Lcd "Spannung:" ; Fusing(volt , "#.##") ; " Volt"
End Sub
'Dies Funktion gibt auf einem angeschlossenen LCD-Display (2x27 Zeichen)
'eine Copyright Meldung aus
Sub Textauflcdausgeben()
___lcdno = 0 'Ober Displayhälfte initialisieren, wenn das Display zwei LCD-Controller besitzt
Initlcd
Cursor Off
Cls
Home
Lcd "Das neue Experimentierboard"
Locate 2, 4
Lcd "** RN-MEGA 8 V1.4 **"
___lcdno = 1 'Dies ist nur notwendig wenn das Display zwei LCD-Controller besitzt
Initlcd
Cursor Off
Cls
Home
Lcd "nach Roboternetz Standard"
Locate 2, 3
Lcd "(c) robotikhardware.de"
'Fuer RS232
Print "**** RN-MEGA 8 V 1.4 *****"
Print "Das neue Mega 8 Entwicklungsboard von www.robotikhardware.de"
End Sub
'Einige male Lauflicht über Balkenanzeige laufen lassen
Sub Lauflicht()
Config Portd = Output
Config Pinb.0 = Output
Config Pinb.1 = Output
Portd = 255
Portb 0# = 1
Portb 0.1 = 1
For N = 1 To 10
For I = 0 To 9
Select Case I
Case 0 To 7:
Portd.I = 0
Waitms 150
Portd.I = 1
Case 8:
Portb 0# = 0
Waitms 150
Portb 0# = 1
Case 9:
Portb 0.1 = 0
Waitms 150
Portb 0.1 = 1
End Select
Next I
Next N
Config Portd = Input
Config Pinb.0 = Input
Config Pinb.1 = Input
!Call 0 'Führt RESET aus
End Sub
Sub Lottozahlen()
Print "Lotozahlen: ";
___lcdno = 0 'Ober Displayhälfte initialisieren, wenn das Display zwei LCD-Controller besitzt
Initlcd
Cursor Off
Cls
Home
Lcd "Lottozahlentip-ohne Gewaehr):" "
Locate 2, 1
For I = 1 To 6
N = Rnd(48)
N = N + 1
Print " "; N;
Lcd " " ; N;
Next I
Print
End Sub
Sub Sirene()
For N = 1 To 5
For I = 500 To 900
Sound Portb.0 , 5 , I
Next I
For I = 900 To 500 Step -1
Sound Portb.0 , 5 , I
Next I
Next N
End Sub
Gruß Frank
Lesezeichen