Programme zu RN-Control
Hier möchte ich wieder ein Testprogramm zum Board RN-Control posten. Damit haben es Einsteiger die das Board gerade zusammengebaut oder fertig gekauft haben etwas einfacher die ersten Funktionen zu testen.
Im Gegensatz zum RNBFRA Board habe ich die Test´s nicht in kleine Teilprogramme aufgeteilt sondern in ein Gesamtprogramm. Das das Board ja über mehrere Taster verfügt, können die einzelnen Test´s (Funktionen) einfach per Taste auf dem Board angewählt werden.
Das ganze hat auch den Vorteil das man gleich sieht wie man die Tasten am einfachsten abfragen kann. Zudem habe ich absichtlich Unterfunktionen und Subroutinen verwendet. Dadurch wird das ganze etwas übersichtlicher und man kann einzelne Funktionen Schrittweise durch andere ersetzen.
Wenn jemand weiter Ideen für Beispiele hat, kann er diese gerne posten. Andere Einsteiger werden das sicher begrüßen. Auch eine C- oder ASM-Variante wäre nicht schlecht. Die C-Fan´s im Forum sind leider noch nicht so aktiv beim posten von Beispielen. Schade!
So, nun zum Beispielprogramm. Das Programm ist für Mega 16 konzipiert aber läuft natürlich auch auf Mega 32. Die Funktion des Programmes ist im Quelltext sicher ausreichend erläutert. Wie man Bascom installiert und Programm compiliert steht ja in der RN-Control Anleitung.
Wer dan RNBFRA Board kennt, wird viele ähnlichkeiten erkennen. Das liegt daran das wichtige Ports wie die für die Motorsteuerung, ganz genauso wie beim RNBFRA Board belegt sind. Dadurch können Programme sehr schnell auch etwas verändert und dann auf beiden Boards benutzt werden.Code:'################################################### 'rncontroltest.BAS 'für 'RoboterNetz Board RN-Control 1.1 'Das neue preiswerte Controllerboard 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 an ' Taste 2: Angeschlossene Motoren beschleunigen und abbremsen ' Taste 3: Einige male Lauflicht über LED´s anzeigen. Am I2C-Bus ' darf in diesem Moment nichts angeschlossen sein ' Taste 4: Zeigt analoge Messwerte an allen Port A PIN´s über RS232 an ''Taste 5: Zeigt digitalen I/O Zustand von PA0 bis PA5 an ' Ser 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 '####################################################### Declare Sub Batteriespannung() Declare Sub Motortest() Declare Sub Lauflicht() Declare Sub Showporta() Declare Sub Showdigitalporta() Declare Function Tastenabfrage() As Byte $regfile = "m16def.dat" Dim I As Integer Dim N As Integer dim Ton As Integer $crystal = 16000000 'Quarzfrequenz $baud = 9600 Config Adc = Single , Prescaler = Auto 'Für Tastenabfrage und Spannungsmessung Config Pina.7 = Input 'Für Tastenabfrage Porta.7 = 1 'Pullup Widerstand ein Const Ref = 5 / 1023 'Für Batteriespannungsberechnung Dim Taste As Byte Dim Volt As Single ' Für Motorentest 'Ports für linken Motor Config Pinc.6 = Output 'Linker Motor Kanal 1 Config Pinc.7 = Output 'Linker Motor Kanal 2 Config Pind.4 = Output 'Linker Motor PWM 'Ports für rechten Motor Config Pinb.0 = Output 'Rechter Motor Kanal 1 Config Pinb.1 = Output 'Rechter Motor Kanal 2 Config Pind.5 = Output 'Rechter Motor PWM Config Timer1 = Pwm , Pwm = 10 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down Pwm1a = 0 Pwm1b = 0 Tccr1b = Tccr1b Or &H02 'Prescaler = 8 I = 0 Sound Portd.7 , 400 , 450 'BEEP Sound Portd.7 , 400 , 250 'BEEP Sound Portd.7 , 400 , 450 'BEEP Print Print "**** RN-Control 1.1 *****" Print "Das neue Experimentier- und Roboterboard" Print Do Taste = Tastenabfrage() If Taste <> 0 Then Select Case Taste Case 1 Call Batteriespannung 'Taste 1 Zeigt Bateriespannung über RS232 an Case 2 Call Motortest 'Taste 2 Motoren beschleunigen und abbremsen Case 3 Call Lauflicht 'Einige male Lauflicht über LED´s anzeigen. Am I2C-Port darf in diesem Moment nichts angeschlossen sein Case 4 Call Showporta 'Zeigt Messwerte an allen Port A PIN´s Case 5 Call Showdigitalporta 'Zeigt digitalen I/O Zustand von PA0 bis PA5 an End Select Sound Portd.7 , 400 , 500 'BEEP End If Waitms 100 Loop End 'Diese Unterfunktion fragt die Tastatur am analogen Port ab Function Tastenabfrage() As Byte Local Ws As Word Tastenabfrage = 0 Ton = 600 Start Adc Ws = Getadc(7) If Ws < 1010 Then Select Case Ws Case 410 To 450 Tastenabfrage = 1 Ton = 550 Case 340 To 380 Tastenabfrage = 2 Ton = 500 Case 265 To 305 Tastenabfrage = 3 Ton = 450 Case 180 To 220 Tastenabfrage = 4 Ton = 400 Case 100 To 130 Tastenabfrage = 5 Ton = 350 End Select Sound Portd.7 , 400 , Ton 'BEEP End If End Function 'Diese Unterfunktion zeigt Bateriespannung an Sub Batteriespannung() Local W As Word Start Adc W = Getadc(6) Volt = W * Ref Volt = Volt * 5.2941 Print "Die aktuelle Spannung beträgt: " ; Volt ; " Volt" End Sub 'Testet Motoren und Geschwindigkeitsreglung Sub Motortest() 'Linker Motor ein Portc.6 = 1 'bestimmt Richtung Portc.7 = 0 'bestimmt Richtung Portd.4 = 1 'Linker Motor EIN 'Rechter Motor ein Portb.0 = 1 'bestimmt Richtung rechter Motor Portb.1 = 0 'bestimmt Richtung rechter Motor Portd.5 = 1 'rechter Motor EIN I = 0 Do Pwm1a = I Pwm1b = I Waitms 40 I = I + 5 Loop Until I > 1023 Wait 1 Do Pwm1a = I Pwm1b = I Waitms 40 I = I - 5 Loop Until I < 1 Pwm1a = 0 'Linker Motor aus Pwm1b = 0 'rechter Motor aus End Sub 'Einige male Lauflicht über LED´s anzeigen. Am I2C-Port darf in diesem Moment nichts angeschlossen sein Sub Lauflicht() Config Portc = Output Portd = 0 For N = 1 To 10 For I = 0 To 7 Portc.i = 0 Waitms 100 Portc.i = 1 Next I Next N Config Portc = Input End Sub 'Zeigt Die Analogen Messwerte An Port A An Sub Showporta() Local Ws As Word Config Porta = Input For I = 0 To 5 ' Alle internen Pullup Widerständ ein,bis auf Batteriespannungsmessungsport Porta.i = 1 Next I Print Print "Ermittelte Messwerte an Port A:" For I = 0 To 7 ' Alle Eingäne inkl.messen Start Adc Ws = Getadc(i) Volt = Ws * Ref Print "Pin " ; I ; " ADC-Wert= " ; Ws ; " bei 5V REF waeren das " ; Volt ; " Volt" Next I End Sub 'Zeigt den Zustand einiger freier I/OI/O von Die Analogen Messwerte An Port A An Sub Showdigitalporta() Local Zustand As String Config Porta = Input For I = 0 To 5 ' Alle internen Pullup Widerständ ein,bis auf Batteriespannungsmessungsport Porta.i = 1 Next I Print Print "Ermittelter I/O Zustand Port A:" For I = 0 To 5 ' Alle Eingäne inkl.messen If Pina.i = 1 Then Zustand = "High" Else Zustand = "Low" End If Print "Pin " ; I ; " I/O Zustand= " ; Pina.i ; " " ; Zustand Next I End Sub
Übrigens der Piepser (Minilautsprecher) ist ne feine Sache, ich kann jedem nur empfehlen sowas bei seinen Experimentierschaltungen zu berücksichtigen. Es ist kaum zu glauben, aber so ein paar Piepstöne machen das Experimentieren viel angenehmer. Zudem können über die Tonhöhe wichtige Debug-Signale ausgegeben werden wenn man mal einen Fehler in einem Programm sucht.
Gruß Frank
Ein weiteres Programm, falls man einen LM75 Temperatursensor anschließen möchte:
Code:'################################################### ' rncontrol_lm75.BAS 'für 'RoboterNetz Board RN-Control ab Version 1.1 'Das neue preiswerte Controllerboard zum experimentieren ' 'Aufgabe: ' Temperatur messen mit IC LM75 über den I2C Bus ' Das Beispiel zeigt wie einfach es ist in Basic ' mit RN-Control die Temperatur zu messen ' Benötigt wird nur das IC LM75 ' Das IC wird am I2C-Bus angeschlossen und belegt keinen Port '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 Showtemperatur() $regfile = "m16def.dat" Const Lm75slavewrite = &H90 Const Lm75slaveread = &H91 Dim Lm75high As Byte Dim Lm75low As Byte Dim Temperatur As Integer Dim Nachkommastelle As String * 2 $crystal = 16000000 'Quarzfrequenz $baud = 9600 I2cinit Start: Showtemperatur Wait 2 Goto Start Sub Showtemperatur() I2cstart I2cwbyte Lm75slaveread I2crbyte Lm75high , Ack I2crbyte Lm75low , Nack I2cstop If Lm75high > 127 Then Temperatur = Lm75high And 127 Temperatur = Not Temperatur Incr Temperatur Else Temperatur = Lm75high End If Lm75low = Lm75low And 128 If Lm75low > 0 Then Nachkommastelle = ",5" Else Nachkommastelle = "" End If Print "Die Temperatur beträgt: " ; Temperatur ; Nachkommastelle ; " Grad" End Sub







 
			
			 
					
					
					
						 Zitieren
Zitieren

Lesezeichen