PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Anmerkungen zur Digitalanzeige RN-Digi



Frank
05.09.2004, 19:55
Hallo,
da Platinen erst morgen nachbestellt werden (hatte bislang nur Prototypen hier), hab ich jetzt auch Alternativ noch kleinere 20mm Segmentanzeigen vorgesehen.
Jetzt kann also jeder der die Platine haben will, wahlweise die großen 7-Segmentanzeigen oder die kleinen günstigen einsetzen. Diese kosten nur etwa 1/3 so viel. Somit ist das Board noch etwas flexibler geworden.

Als Bausatz wird unverändert der mit dem großen Conrad-Segmenten angeboten. Aber wer nur Platine bestellt kann es wahlweise auch mit dem kleinen günstigen Segment SC08-11 RT bestücken.

Gruß Frank

the_Ghost666
09.09.2004, 12:40
ähm warum steht auf seite 6 der dokumentation
"Inbetriebnahme des MOTOR Boards

Frank
09.09.2004, 12:53
Oh, noch kleiner Tippfehler rein gerutscht. Werde das in Anleitung noch ändern. Liegt daran, das ich bei den Anleitungen imme reinen ähnlichen Aufbau wähle und das Grundmuster der letzten Schaltung kopiere. Da hab ich dann das editieren vergessen.

Gruß Frank

So, Fehler ist schon korrigiert - Download wieder aktuell!

Max666
14.10.2004, 18:33
Hallo zusammen,

ich habe gerade mein RN-Control(mega32) + RN-Digi bekommen.
Das Testprogramm vom Control hat auch funktioniert. Wobei ich nach einmal übertragen mit Bascom mein Arbeitsverzeichnis löschen muß, da ich sonst immer eine Fehlermeldung "Difference at blablabla" bekomme.
Wenn ich die Daten frisch von der CD in mein Arbeitsverzeichnis kopiere (und den ganzen Schrott, den das Prg. anlegt, rausnehme) funktioniert es wieder _ein_ mal. Was sollen die ganzen Dateien eigentlich? Eine bas bzw. hex Datei sollte dem Ding doch langen, oder?

Das Programm rncontrol_digitest.BAS bzw. die hex-Datei dazu läßt sich aber garnicht übertragen. Da erscheint immer die Fehlermeldung "Difference at 0003" - hmm!?
Ich habe die Zeile $regfile = "m16def.dat" dann mal intuitiv (kann ja noch nicht programmieren) auf $regfile = "m32def.dat" geändert. Die Fehlermeldung ändert sich dann auf "Difference at 0050". Was soll mir das sagen?

Ich denke mal das es warscheinlich daran liegt das das Prg. für einen anderen mC geschreiben ist. Gibt es hier (oder hat irgendjemand) ein auf dem mega32 angepasstes Digitest Programm, welches bei mir auf der CD scheinbar fehlt?

Auf der Unterseite der Digi-Platine ist mir noch was aufgefallen. Am I2C-Connector ist eine komische Brücke gelötet worden (von Kondensator 2 nach Pin 9. Außerdem ist die Leiterbahn die zu Pin 3 führt "weg gebohrt" - ist das normal?

Edit: Entwarnung - ich war zu blöd!
Wenn ich den mC vorher lösche funktioniert alles wunderbar. Ich dachte das Flashrom wird automatisch überschrieben wo wie ne Datei wenn man was neues reinschreibt^^

Frank
15.10.2004, 01:02
Fein das es nu geht :-) Aber irgendwas scheinst du noch falsch gemacht zu haben. Wenn alles richtig eingestellt ist, dann wird beim übertragen auch der Controller gelöscht. Vielleicht war es nur ein Übertragungsfehler, sowas kann schon mal vorkommen.
Das Beispiel war in der Tat für Mega16. Also beim Mega32 muß $regfile = "m16def.dat" in $regfile = "m32def.dat" geändert werden, wie du es schon geschrieben hast.

Die Dateien gibts übrigens auch hier:
https://www.roboternetz.de/phpBB2/dload.php?action=file&file_id=171

Aber wie gesagt, das Hex-File ist nur für Mega16. Es muß also beim Mega32 nochmal compiliert werden.

Gruß Frank

Max666
15.10.2004, 08:17
Huhu Frank,

ich hab gestern Abend noch etwas an den Einstellungen von Bascom rumgespielt. Aber immer wenn ich im Programmer dem mC vor dem übertragen nicht gelöscht hatte sind die "Difference at ????" Fehler gekommen - dank Counter kann ich sagen das ich es ~ 70x probiert habe^^

Das Hex-File von der CD funktioniert bei mir (mega32) wunderbar. Logischerweise sollte es das wegen $regfile = "m16def.dat" nich, es geht aber!?

@weitere Bascom Besonderheiten reden wir lieber hier weiter ---> https://www.roboternetz.de/phpBB2/viewtopic.php?p=35658#35658
Nich das hier noch alles OT zugemüllt wird ;)

Max666
15.10.2004, 17:45
Hallo Frank,

ich habe mein Problem eingekreist. Einen Fehler beim Übertragen des Programms schließe ich nun aus.

Ich habe das Digi-Demo genommen und einfach mal alles, was mir dem Display zugehörig erscheint, rausgekürzt. Nach 3 Versuchen ging es auch wieder zu Compilieren ;) Ich hatte dann so eine Art "RN-Control-Orgel" Die Tasten 1-5 lassen den Summer unterschiedlich hohe Töne ausgeben.

Ok - also wieder das Digi-Demo geladen. Nun hab ich zwischen jede Zeile einen Sound eingebaut. Das RN-Controll tönt nun also vor sich hin bis zu der Zeile:

Led_display_init
Dort verstummt es, um nach langer Wartezeit (~1-2 min), den Originalsound, der nach der Zeile

I = 0
kommt, auszugeben.

Das RN-Digi bleibt dabei dunkel und macht nichts. Scheinbar will es sich nicht initialisieren lassen(so interpretiere ich zumindest Led_display_init.

Hier nochmal mein ganzer Code:

'################################################# ##
'rncontrol_digitest.BAS Demo zu RN-Digi
'für
'RoboterNetz Board RN-CONTROL ab Version 1.1 und
'Zusatzboard RN-DIGI (vierstellig großes LED-Display per I2C)

'
'Aufgabe:
' Dieses Testprogramm demonstriert die Ansteuerung von RN-Digi

' Den verschiedenen Tasten sind bestimmte Funktionen zugeordnet
' Taste 1: Alle Ziffern auf 0 stellen (genau wie bei Reset)
' Taste 2: Nacheinander alle Ziffern von 0 bis 9 zählen


'Autor: Frank
'Weitere Beispiele und Beschreibung der Hardware
'unter http://www.Roboternetz.de oder robotikhardware.de
'Eigene Programmbeispiele sind im Roboternetz gerne willkommen!
'################################################# #############


Declare Function Tastenabfrage() As Byte
Declare Sub Led_display_init()
Declare Sub Led_display(byval Ziffer As Byte , Byval Zahl As Byte)


$regfile = "m32def.dat"
$crystal = 16000000 'Quarzfrequenz
$baud = 9600

Const Rn_digi_slave_write = &H70
Const Rn_digi_slave_read = &H71
Const Dezimalpunktziffer = 3 'Segment wo Dezimalpunkt leuchten soll (0=keinen)

Dim Segmente As Byte
Dim Z As Byte
Dim I As Byte
Dim N As Integer
Dim Ton As Integer

Config Adc = Single , Prescaler = Auto 'Für Tastenabfrage und Spannungsmessung
Config Pina.7 = Input 'Für Tastenabfrage
Porta.7 = 1 'Pullup Widerstand ein
Dim Taste As Byte


I2cinit

Sound Portd.7 , 400 , 400 'BEEP
Sound Portd.7 , 400 , 300 'BEEP

Led_display_init

I = 0
Sound Portd.7 , 400 , 450 'BEEP
Sound Portd.7 , 400 , 250 'BEEP
Sound Portd.7 , 400 , 450 'BEEP
Do

Taste = Tastenabfrage()
If Taste <> 0 Then

Select Case Taste
Case 1
For Z = 1 To 4
Led_display Z , 0
Next Z

Case 2
For Z = 1 To 4
For I = 0 To 9
Led_display Z , I
Waitms 300
Next I
Next Z


Case 3

Case 4

Case 5



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



Sub Led_display_init()

I2cstart
I2cwbyte Rn_digi_slave_write

Sound Portd.7 , 400 , 400 'BEEP
Sound Portd.7 , 400 , 300 'BEEP

I2cwbyte 0 'Control Byte

Sound Portd.7 , 400 , 400 'BEEP
Sound Portd.7 , 400 , 300 'BEEP

'Dynamic Alternative Mode und Helligkeit
'Die oberen 3 Bits bestimmen die Helligkeit
'Wenn es dunkler sein soll dann z.b. &B0110111
I2cwbyte &B1110111

I2cstop

Sound Portd.7 , 400 , 400 'BEEP
Sound Portd.7 , 400 , 300 'BEEP

'Alle Ziffern auf 0
For Z = 1 To 4
Led_display Z , 0
Next Z

Sound Portd.7 , 400 , 400 'BEEP
Sound Portd.7 , 400 , 300 'BEEP

End Sub


Sub Led_display(ziffer An Byte , Zahl As Byte)
I2cstart
I2cwbyte Rn_digi_slave_write
I2cwbyte Ziffer


Select Case Zahl
Case 0:
Segmente = &H3F
Case 1:
Segmente = &H06
Case 2:
Segmente = &H5B
Case 3:
Segmente = &H4F
Case 4:
Segmente = &H66
Case 5:
Segmente = &H6D
Case 6:
Segmente = &H7D
Case 7:
Segmente = &H07
Case 8:
Segmente = &H7F
Case 9:
Segmente = &H67
Case Else :
Segmente = &H80 'Ansonsten Dezimalpunkt

End Select

If Dezimalpunktziffer = Ziffer Then Segmente = Segmente Or &H80
I2cwbyte Segmente
I2cstop
End Sub

Woran kann es liegen das sich das RN-Digi bei mir nicht initialisieren läßt?

Edit: Ich sehe gerade das Led_display_init nach unten ins Programm springt. Dort habe ich nochmal mehr Sounds eingebaut. Diese kommen mit einer Verzögerung von ~ 3-5 sek.
Der letzte aber (vor dem Original Init-Sound oben im Programm) läßt nochmal ca. 1 min auf sich warten.
Den Code oben habe ich auf meinen aktuellen angepasst.

Der Jumper ADR1 steht übrigens auf &H70 - sollte also passen bzw. funktioniert ja auch beim Hex-File von der CD.

Oder kann es sein das der I2cinit nicht funktioniert (der kommt ja immer vor dem Display-Zeug)

Frank
15.10.2004, 19:06
Hi Max666,
also irgendwie verstehe ich dein Problem noch nicht richtig. Du hast doch gesagt das die Digitalanzeige schon mit dem Demo gelaufen ist.

Ich hab es nochmal ausprobiert und einfach die Include-Zeile wie oben schon genannt ausgewechselt und dann das ganze mit dem Demo für den Mega32 compiliert. Hatte dabei überhaupt keinerlei Probleme. Du mußt eigentlich garnix am Code ändern.
So wie er hier ist, läuft er auf dem Mega32



'################################################# ##
'rncontrol_digitest.BAS Demo zu RN-Digi
'für
'RoboterNetz Board RN-CONTROL ab Version 1.1 und
'Zusatzboard RN-DIGI (vierstellig großes LED-Display per I2C)

'
'Aufgabe:
' Dieses Testprogramm demonstriert die Ansteuerung von RN-Digi

' Den verschiedenen Tasten sind bestimmte Funktionen zugeordnet
' Taste 1: Alle Ziffern auf 0 stellen (genau wie bei Reset)
' Taste 2: Nacheinander alle Ziffern von 0 bis 9 zählen


'Autor: Frank
'Weitere Beispiele und Beschreibung der Hardware
'unter http://www.Roboternetz.de oder robotikhardware.de
'Eigene Programmbeispiele sind im Roboternetz gerne willkommen!
'################################################# #############


Declare Function Tastenabfrage() As Byte
Declare Sub Led_display_init()
Declare Sub Led_display(byval Ziffer As Byte , Byval Zahl As Byte)


$regfile = "m32def.dat"

Const Rn_digi_slave_write = &H70
Const Rn_digi_slave_read = &H71
Const Dezimalpunktziffer = 2 'Segment wo Dezimalpunkt leuchten soll (0=keinen)

Dim Segmente As Byte
Dim Z As Byte
Dim I As Byte
Dim N As Integer
Dim Ton As Integer



$crystal = 16000000 'Quarzfrequenz
$baud = 9600

Config Scl = Portc.0 'Ports fuer IIC-Bus
Config Sda = Portc.1

Config Adc = Single , Prescaler = Auto 'Für Tastenabfrage und Spannungsmessung
Config Pina.7 = Input 'Für Tastenabfrage
Porta.7 = 1 'Pullup Widerstand ein
Dim Taste As Byte





I2cinit
Led_display_init

I = 0
Sound Portd.7 , 400 , 450 'BEEP
Sound Portd.7 , 400 , 250 'BEEP
Sound Portd.7 , 400 , 450 'BEEP
Print
Print "**** RN-CONTROL V1.4 *****"
Print "Das neue Experimentier- und Roboterboard"
Print
Do




Taste = Tastenabfrage()
If Taste <> 0 Then

Select Case Taste
Case 1
For Z = 1 To 4
Led_display Z , 0
Next Z

Case 2
For Z = 1 To 4
For I = 0 To 9
Led_display Z , I
Waitms 300
Next I
Next Z


Case 3

Case 4

Case 5



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




Sub Led_display_init()
I2cstart
I2cwbyte Rn_digi_slave_write
I2cwbyte 0 'Control Byte

'Dynamic Alternative Mode und Helligkeit
'Die oberen 3 Bits bestimmen die Helligkeit
'Wenn es dunkler sein soll dann z.b. &B0110111
I2cwbyte &B1110111

I2cstop

'Alle Ziffern auf 0
For Z = 1 To 4
Led_display Z , 0
Next Z

End Sub


Sub Led_display(ziffer An Byte , Zahl As Byte)
I2cstart
I2cwbyte Rn_digi_slave_write
I2cwbyte Ziffer


Select Case Zahl
Case 0:
Segmente = &H3F
Case 1:
Segmente = &H06
Case 2:
Segmente = &H5B
Case 3:
Segmente = &H4F
Case 4:
Segmente = &H66
Case 5:
Segmente = &H6D
Case 6:
Segmente = &H7D
Case 7:
Segmente = &H07
Case 8:
Segmente = &H7F
Case 9:
Segmente = &H67
Case Else :
Segmente = &H80 'Ansonsten Dezimalpunkt

End Select

If Dezimalpunktziffer = Ziffer Then Segmente = Segmente Or &H80
I2cwbyte Segmente
I2cstop
End Sub


Oder verstehe ich dich irgendwie falsch?
Vielleicht sind bei dir die I2C-Ports falsch definiert, ich hab diese sicherheitshalber mal oben im Code definiert
Das sind die Zeilen:


Config Scl = Portc.0 'Ports fuer IIC-Bus
Config Sda = Portc.1

Max666
15.10.2004, 20:10
Jaaa! Das war es *freu*
Wie gesagt - ich kenne mich mit Programmierung und mCs noch nicht aus. Aber durch das Schildern meiner Symptome bist du drauf gekommen :)

Hätte ich das irgendwo anders noch einstellen können?

Jetzt wo das Schreiben Softwaremäßig richtig funktioniert und das Programm auch läuft kann ich ja mal anfangen was eigenes zu schreiben - zumindest versuche ich es ;)

Frank
15.10.2004, 20:25
Aha, gut zu wissen das offenbar nicht überall diese i2C-Ports in der Entwicklungsumgebung definiert sind. Ich werde das auf CD ergänzen, dann stolpert keiner mehr drüber.
Dann mal viel Spaß

So, ich hab die Demos im Download Bereich auch aktuallisiert und gleich für Mega 16 und 32 getrennte Demos rein gepackt. Nu kann nichts mehr schief gehen.

Max666
16.10.2004, 00:12
Huhu Frank,

ich habe jetzt schon ein paar Sachen in der Demo rumgeschoben. Dabei ist mir aufgefallen das Taste 1 bei mir das Display nicht auf 0 setzt. Wenn ich
For Z = 1 To 4
Led_display Z , 0
Next Z
unter Taste 3,4 und 5 Schreibe geht es jeweils mit sound "dii - düü" der unter Tastenabfrage definiert ist. Wenn ich taste 1 Drücke macht es nur "düü" (denke mal das es der 550er Sound ist) und das Display bleibt auf dem Wert den es vorher angezeigt hat.

Was sagt mit in dem Zusammenhang das?


Select Case Ws
Case 410 To 450

Hier nochmal meine umgebaute Demo:

'################################################# ##
'rncontrol_digitest.BAS Demo zu RN-Digi
'für
'RoboterNetz Board RN-CONTROL ab Version 1.1 und
'Zusatzboard RN-DIGI (vierstellig großes LED-Display per I2C)

'
'Aufgabe:
' Dieses Testprogramm demonstriert die Ansteuerung von RN-Digi

' Den verschiedenen Tasten sind bestimmte Funktionen zugeordnet
' Taste 1: Alle Ziffern auf 0 stellen (genau wie bei Reset)
' Taste 2: Nacheinander alle Ziffern von 0 bis 9 zählen


'Autor: Frank
'Weitere Beispiele und Beschreibung der Hardware
'unter http://www.Roboternetz.de oder robotikhardware.de
'Eigene Programmbeispiele sind im Roboternetz gerne willkommen!
'################################################# #############


Declare Function Tastenabfrage() As Byte
Declare Sub Led_display_init()
Declare Sub Led_display(byval Ziffer As Byte , Byval Zahl As Byte)


$regfile = "m32def.dat"
$crystal = 16000000 'Quarzfrequenz
$baud = 9600

Config Scl = Portc.0 'Ports fuer IIC-Bus
Config Sda = Portc.1

Const Rn_digi_slave_write = &H70
Const Rn_digi_slave_read = &H71
Const Dezimalpunktziffer = 2 'Segment wo Dezimalpunkt leuchten soll (0=keinen)

Dim Segmente As Byte
Dim Z As Byte
Dim I As Byte
Dim N As Integer
Dim Ton As Integer

Config Adc = Single , Prescaler = Auto 'Für Tastenabfrage und Spannungsmessung
Config Pina.7 = Input 'Für Tastenabfrage
Porta.7 = 1 'Pullup Widerstand ein
Dim Taste As Byte


I2cinit

Led_display_init
I = 0
Sound Portd.7 , 400 , 450 'BEEP
Sound Portd.7 , 400 , 250 'BEEP
Sound Portd.7 , 400 , 450 'BEEP
Do

Taste = Tastenabfrage()
If Taste <> 0 Then

Select Case Taste

Case 1
For Z = 1 To 4
Led_display Z , 0
Next Z

Case 2
For Z = 1 To 4 'Segmentnummer
For I = 0 To 9 'Zähle von 0 bis 9
Led_display Z , I
Waitms 50 'Wartezeit zwischen den Zahlen
Sound Portd.7 , 100 , 450 'BEEP
Next I
Sound Portd.7 , 50 , 650 'BEEP
Next Z

Case 3
For Z = 1 To 4
Led_display Z , 0
Next Z

Case 4
For Z = 1 To 4
Led_display Z , 0
Next Z
Case 5
For Z = 1 To 4
Led_display Z , 0
Next Z


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



Sub Led_display_init()

I2cstart
I2cwbyte Rn_digi_slave_write


I2cwbyte 0 'Control Byte


'Dynamic Alternative Mode und Helligkeit
'Die oberen 3 Bits bestimmen die Helligkeit
'Wenn es dunkler sein soll dann z.b. &B0110111
I2cwbyte &B0010111

I2cstop


'Alle Ziffern auf 0
For Z = 1 To 4
Led_display Z , 0
Next Z


End Sub


Sub Led_display(ziffer An Byte , Zahl As Byte)
I2cstart
I2cwbyte Rn_digi_slave_write
I2cwbyte Ziffer


Select Case Zahl
Case 0:
Segmente = &H3F
Case 1:
Segmente = &H06
Case 2:
Segmente = &H5B
Case 3:
Segmente = &H4F
Case 4:
Segmente = &H66
Case 5:
Segmente = &H6D
Case 6:
Segmente = &H7D
Case 7:
Segmente = &H07
Case 8:
Segmente = &H7F
Case 9:
Segmente = &H67
Case Else :
Segmente = &H80 'Ansonsten Dezimalpunkt

End Select

If Dezimalpunktziffer = Ziffer Then Segmente = Segmente Or &H80
I2cwbyte Segmente
I2cstop
End Sub

Frank
16.10.2004, 00:47
Hi Max,
du mußt die Tastenabfrage eventuell an dein RN-Control anpaßen. Die Tastenabfrage erfolgt über einige Widerstände am analogen Port. Durch gewisse Toleranzen liefern die Tasten bei jedem RN-COntrol geringfügig andere Tastenwerte. Ich hab die Select Case Anweisungen bei dem Demo auf die schnelle etwas zu eng definiert, daher rutscht manchmal eine Taste neben den definierten Bereich.

Am besten mal PC mit Terminaprogramm anschließen und mit Print in der Tastenabfrage den Wert WS ausgeben lassen. Bei jeder Taste kommt ein anderer Wert raus.
Du mußt die Select Case Anweisung so anpassen, das der WS-Wert bei jeder Taste in etwa in der Mitte der einzelnen Case-Anweisung liegt


Case 410 To 450

Das muß nur einmal gemacht werden, dann kannst du immer wieder diese Werte nehmen.
In der Regel paßt jedoch folgende Tastenfunktion bei fast allen RN-Control´s:


'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)
Print "Tastenabfrage anpassen!ADC Wert ws=" ; Ws
If Ws < 500 Then
Select Case Ws
Case 400 To 450
Tastenabfrage = 1
Ton = 550
Case 330 To 380
Tastenabfrage = 2
Ton = 500
Case 260 To 305
Tastenabfrage = 3
Ton = 450
Case 180 To 220
Tastenabfrage = 4
Ton = 400
Case 90 To 130
Tastenabfrage = 5
Ton = 350
End Select
Sound Portd.7 , 400 , Ton 'BEEP

End If


End Function

Eventuell also diese Funktion einfach gegen deine austauschen!
Oben siehst du auch den Print Befehl, der den WS Wert auf einem Terminalprogramm ausgeben kann. Der Sound Befehl ist ja ganz nützlich, aber für weitere experimente solltest du auch Terminalprogramm und RS232 Verbindung nutzen. In Bascom ist Terminalprogramm eingebaut.
Das hat aber eigentlich nichts mit RN-Digi zu tun

Und noch gleich ein Hinweis, du solltest unter Optionen/COmpiler/Chip bei Bascom bei HW Stack, SW Stack und Framesize höhere Werte einsetzen. Wenn du überall 32 einsetzt, dann bist du zumindest bei diesem und ähnlichen Programmen auf der sicheren Seite. Ansonsten kann der Stack bei der Verwendung von Unterfunktionen schnell mal überlaufen.

Max666
16.10.2004, 10:19
Hallo Frank,

es funktioniert. :)
Das Ws so ne Art Toleranz ist dachte ich mir fast. Ich wußte nur nicht was es genau ist.

Nur hab ich nun mit der Demo von Bascom das Problem das die rummeckert das ich über 2k nicht Compilieren darf... naja ich hab dann alle Print Anweisungen rausgemacht (auch die neue ;) ) dann geht es.

Danke nochmal für die schnelle Hilfe =D>

Hellmut
28.02.2005, 17:23
Hallo Frank

Ich habe die RN-Digi zusammengebaut, mit meiner RN-Control über I2C verbunden, das Demo-Programm für die RN-Digi auf meine RN-Control geladen und Saft angelegt.

LED1, alles OK
LED3, funktioniert segment "c" nicht
LED2&4 tut sich garnichts!

RESET-Taster auf RN-Control und erkennen können, das LED1&3 "0" anzeigen.

Taste 2 gedrückt, LED1 zählt perfekt durch, LED2 wird vermutlich vom Programm angesteuert, da LED3 dann ordnungsgemäß durchzählt, wobei "c" tot bleibt, dann vergeht die zeit damit LED4 auch durchzählt und es kommt ein "peep"

Daraus schliesse ich das die RN-Control und RN-DIGI ordnungsgemäß kommunizieren, dh RN-Control sendet die I2C-Befehle, der Philps Baustein gibt der RN-Control keinen Anlaß einen fehler zu melden.

Nach Studium der Unterlagen habe ich einen Lötfehler in der Verbindung zwischen LED3 und dem Philips-Steuerbaustein für möglich gehalten, Ansprache "Segment "c", leider Fehlanzeige.

Betreff LED2&4 hätten es die Steuersignale an PIN 3&8 der LED`s sein können, sprich das multiplexen klappt nicht. Auch hier Lötstellen überprüft, leider vergeblich. Auch die Lötstellen am T2 OK.

War heute bei Conrad und habe mir 2 neue LED's besorgt, sowie 2 Transistoren um Material zum debuggen zu haben. Philips Baustein war dort nicht zu bekommen. Bekomme ich den bei dir?

Welches weitere Vorgehen empfiehlst du?

Frank
28.02.2005, 18:51
Kommunikation scheint bei Dir richtig zu funktionieren. Und wenn du nix am Programm verändert hast, dann kanns eigentlich nur noch an irgend einen Lötfehler/Bestückungsfehler liegen.
Prüfe mal ob alles bei den Transistoren richtig stimmt (richtigrum?). Und schau auch mal das du C3 nicht verwechselst.

Dann hast du ein Lötfehler genannt. Du solltest mal prüfen ob das nicht doch die Ursache sein könnte, eine ungünstige Brücke könnte duchaus auch den Philips SAA Chip himmeln.
Ein defektes LED halt ich für unwahrscheinlich, zum einen sind die recht teuer und werden garantiert bei Produktion geprüft und so ganz schnell bekommt man die großen Segmente auch nicht kaputt. Wenn du IC aus Fassung nimmst, kannst du natürlich auch alles mit Ohmmeter ein wenig durchmessen

Ich würde alles nochmal genau prüfen und wenn alles stimmt mal den SAA Chip austauschen. Kannst du auch bei Reichelt bekommen, falls du da zufällig gerade was brauchst, ansonsten bei mir.

Sunnyboy
14.12.2007, 22:35
So Überraschung ich hab ein Problem. Und zwar ich hab den ATMega128Funk darum habe ich versucht das Programm von Frank entsprechend zu modifizieren.



'################################################# ##
'rncontrol_digitest.BAS Demo zu RN-Digi
'für
'RoboterNetz Board RN-CONTROL ab Version 1.1 und
'Zusatzboard RN-DIGI (vierstellig großes LED-Display per I2C)
'
'Aufgabe:
' Dieses Testprogramm demonstriert die Ansteuerung von RN-Digi
' Den verschiedenen Tasten sind bestimmte Funktionen zugeordnet
' Taste 1: Alle Ziffern auf 0 stellen (genau wie bei Reset)
' Taste 2: Nacheinander alle Ziffern von 0 bis 9 zählen
'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 Led_display_init()
Declare Sub Led_display(byval Ziffer As Byte , Byval Zahl As Byte)


$regfile = "m128def.dat"

Const Rn_digi_slave_write = &H70
Const Rn_digi_slave_read = &H71
Const Dezimalpunktziffer = 2 'Segment wo Dezimalpunkt leuchten soll (0=keinen)

Dim Segmente As Byte
Dim Z As Byte
Dim Zahl As Byte



$crystal = 16000000 'Quarzfrequenz
$baud = 9600

Config Scl = Portd.7
Config Sda = Portd.0 'Ports fuer IIC-Bus



I2cinit
Led_display_init




Sub Led_display_init()
I2cstart
I2cwbyte Rn_digi_slave_write
I2cwbyte 0 'Control Byte

'Dynamic Alternative Mode und Helligkeit
'Die oberen 3 Bits bestimmen die Helligkeit
'Wenn es dunkler sein soll dann z.b. &B0110111
I2cwbyte &B1110111

I2cstop

'Alle Ziffern auf 0
For Z = 1 To 9
Led_display Zahl , Z
Next Z

End Sub


Sub Led_display(ziffer An Byte , Zahl As Byte)
I2cstart
I2cwbyte Rn_digi_slave_write
I2cwbyte Ziffer


Select Case Zahl
Case 0:
Segmente = &H3F
Case 1:
Segmente = &H06
Case 2:
Segmente = &H5B
Case 3:
Segmente = &H4F
Case 4:
Segmente = &H66
Case 5:
Segmente = &H6D
Case 6:
Segmente = &H7D
Case 7:
Segmente = &H07
Case 8:
Segmente = &H7F
Case 9:
Segmente = &H67
Case Else :
Segmente = &H80 'Ansonsten Dezimalpunkt

End Select

If Dezimalpunktziffer = Ziffer Then Segmente = Segmente Or &H80
I2cwbyte Segmente
I2cstop
End Sub




Bin mir aber recht sicher zumindest bei der For-Schleife Mist gebaut zu haben. Den es gibt zwar keine Fehlermeldungen aus. Tut aber bei der Rn-Digi 7-Segmentanzeige auch nichts.

Hat jemand Vorschläge?
Wäre aber schon dankbar wenn jemand mein Programm durchlesen und mich auf Fehler und Verbesserungen aufmerksam machen kann.

Danke Simon