Beste mensen,

Ik heb hier een breadboard brouwsel dat last heeft van een osccilerend display, althans zo noem ik het maar:

Klik hier voor een filmpje

De voeding lijkt op het eerste gezicht goed. (gemeten met scoop).
Op het bordje zit een microcontroller met l298n met bipolaire stappen motor.

Wie weet wat er aan de hand is?

Stuur je soms continue data naar het display ?

probeer het eens zonder stappen motor eraan :)
ik denk nl dat je weleens last kunt heben van een HF storing op je voeding.

Op 25 januari 2008 15:10:17 schreef High met Henk:
ik denk nl dat je weleens last kunt heben van een HF storing op je voeding.

Of LF ;)
Grounds netjes bedraad? Sterpunten ed.
Wel vreemd dat het enkel bij de eerste character is. Wat is je code?
Goed gedaan? Delays, initialiseren ed?

Er wordt niet continu data naar het display gestuurd.
En wanneer ik de L298 eruit trek dan blijft het display 'griemelen'

okee, niet continu. Maar hoesnel wel?
weet iemand misschien hoe snel een display data te verwerken mag krijgen?

en kijk ook even of je wel de resetpinnen e.d. goed bedraad hebt met pulup weerstanden. heb ik ook al wel eens rare fouten door gehad.

[Bericht gewijzigd door MAH op (38%)]

Op 25 januari 2008 15:20:07 schreef MAH:
okee, niet continu. Maar hoesnel wel?
weet iemand misschien hoe snel een display data te verwerken mag krijgen?

Niet snel, vandaar de delays. Ik denk dat er een delay ontbreekt ergens of te kort.

Zo te zien schrijf je continu code?

Dit is zeker weten continue aansturing.. ondanks de delays..

Wat ik meestal doe is alle text die voor na genoeg alles hetzelfde is, 1x op het scherm zetten.. en alleen de variabelen laten veranderen..

Scheelt enorm veel code en geflikker in het scherm ;)

Goed, tijd voor een code post :)


$regfile = "m8515.dat"
$crystal = 8000000                                          '8 mhz intern

Config Lcdpin = Pin , Db4 = Porta.2 , Db5 = Porta.3 , Db6 = Porta.4 , Db7 = Porta.5 , E = Porta.1 , Rs = Porta.0
Config Lcd = 16 * 2
Cursor Off
Cls

Config Kbd = Portb , Debounce = 22 , Delay = 100            'keypad poort


Declare Sub Motor_stap(byval Stappen As Integer)            'verklaring subroutines
Declare Sub Motor_terug()

Config Portc = Output                                       'l298 lijnen
Config Portd = Input                                        '0 positiemelding port config

Dim Waarde As Byte                                          'lokaal configgen
Dim Getal As String * 16
Dim Lengte As Byte
Dim Kbd_flag As Byte

Dim Graden As Integer
Dim Stappen As Integer
Dim Temp As Single
Dim Stapgrootte As Single
Stapgrootte = 0.9

Rem        @@@@@@@@@@@@   end  configuration  @@@@@@@@@@@@
Rem            ############## reclame ##################

Cls                                                         ' clear screen
Lcd "Afstemmer"                                             'print @ lcd
Lowerline                                                   'onderste regel
Lcd "Revisie 1.8e"                                          'print @ lcd
Wait 3

Rem              ########### einde reclame  ######

Do
   If Pind.1 = 1 Then
      Cls
      Locate 1 , 1
      Lcd "Stapgrootte?"
      Getal = ""
      Do
         Waarde = Getkbd()
         Waarde = Lookup(waarde , Kbd_data)
         If Waarde < 10 And Kbd_flag = 0 Then
            Lengte = Len(getal)
            If Lengte > 0 Then
               Getal = Getal + Str(waarde)
            Else
               Getal = Str(waarde)
            End If
            Kbd_flag = 1
         End If
         If Waarde = 11 And Kbd_flag = 0 Then
            Lengte = Len(getal) - 1
            If Lengte > 0 Then
               Getal = Getal + "."
            End If
            Kbd_flag = 1
         End If
         If Waarde = 16 And Kbd_flag = 1 Then
            Cls
            Locate 1 , 1
            Lcd "Stapgrootte?"
            Locate 2 , 1
            Lcd Getal
            Kbd_flag = 0
         End If
         If Waarde = 12 Then
           Stapgrootte = Val(getal)
         End If
      Loop Until Waarde = 12 And Pind.1 = 0
   Else
      Cls
      Locate 1 , 1
      Lcd "Aantal graden?"
      Getal = ""
      Do
         Waarde = Getkbd()
         Waarde = Lookup(waarde , Kbd_data)
         If Waarde < 10 And Kbd_flag = 0 Then
            Lengte = Len(getal)
            If Lengte > 0 Then
               Getal = Getal + Str(waarde)
            Else
               Getal = Str(waarde)
            End If
            Kbd_flag = 1
         End If
         If Waarde = 11 And Kbd_flag = 0 Then
            Lengte = Len(getal) - 1
            If Lengte > 0 Then
               Getal = Left(getal , Lengte)
            Else
               Getal = ""
            End If
            Kbd_flag = 1
         End If
         If Waarde = 16 And Kbd_flag = 1 Then
            Cls
            Locate 1 , 1
            Lcd "Aantal graden?"
            Locate 2 , 1
            Lcd Getal
            Kbd_flag = 0
         End If
         If Waarde = 12 Then
            Graden = Val(getal)
            Temp = Graden / Stapgrootte
            Stappen = Int(temp)

            Call Motor_terug()
            Call Motor_stap(stappen)
         End If
      Loop Until Pind.1 = 1
   End If
Loop

End

'###############################################################################
'###################### ->subroutine motor stappen <- ##########################
'###############################################################################
Sub Motor_stap(byval Stappen As Integer)
   Local Aantal As Integer
   Local Positie As Integer
   Aantal = 0
   Positie = 0
   While Aantal < Stappen
      Portc = Lookup(positie , Step_right)
      Incr Aantal
      Incr Positie
      Positie = Positie Mod 8
      Waitms 10
   Wend
End Sub

'###############################################################################
'################# -> Subroutine Motor thus Positie <- #########################
'###############################################################################
Sub Motor_terug()
   Local Positie As Integer
   Positie = 0
   While Pind.0 = 0
      Portc = Lookup(positie , Step_left)
      Incr Positie
      Positie = Positie Mod 8
      Waitms 10
   Wend
   Wait 1
End Sub

'###############################################################################
'###################### -> Keyboard en motor data <- ###########################
'###############################################################################
Kbd_data:
Data 1 , 2 , 3 , 0 , 4 , 5 , 6 , 0 , 7 , 8 , 9 , 0 , 11 , 0 , 12 , 0 , 16
Step_left:
Data 5 , 1 , 9 , 8 , 10 , 2 , 6 , 4
Step_right:
Data 4 , 6 , 2 , 10 , 8 , 9 , 1 , 5

Met 'niet continu' bedoel ik dat er alleen maar wordt herschreven wanneer er ook daadwerkelijk iets anders oet worden weergegeven.

De display-module stuurt het eigenlijke display aan via multiplexing. Mijn indruk is, dat het daar fout loopt. Mogelijk ten gevolgen van een kramikkige voedingsspanning, maar 't kan ook een intern mankement zijn.

Zet je programma eens in een eindeloze dummy-lus, na het initialiseren en het plaatsen van wat tekst op het display, dan schakel je die mogelijke boosdoener alvast uit. Of onderbreek de E-lijn.

Ik ben geen programmeer wonder, maar je tekst die in het filmpje te zien is wordt elke loop naar het LCD geschreven.

Doet het LCD dit ook als je de tekst een enkele opdracht stuurt. De Loop zal je dan even moeten uitschakelen.

edit : iets te veel gepost zag ik.

[Bericht gewijzigd door jovak op (23%)]

Als er een vaste tekst wordt geprogrammerd dan blijft het probleem optreden.

Een ander PLED heb ik niet liggen, en op een gewoon lcd display zal het waarschijnlijk door de traagheid van de 'liquid' niet opvallen

Ik krijg het gevoel dat er toch iets mis is met het display. Werkt je code wel met een gewoon LCD ?