-         

Ergebnis 1 bis 6 von 6

Thema: RC-Kanal auslesen mit Bascom, kleiner Fehler

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    20.04.2005
    Alter
    29
    Beiträge
    31

    RC-Kanal auslesen mit Bascom, kleiner Fehler

    Anzeige

    SMARTPHONES & TABLETS-bis zu 77% RABATT-Kostenlose Lieferung-Aktuell | Cool | Unentbehrlich
    Hallo Forum,

    erstmal ein großes Lob an alle, lese noch nicht lange, aber sehr informativ hier!!!

    Muss mich gleich mal mit einem Rroblem an euch wenden.

    Ich habe folgendes Programm geschrieben, dass mir einen RC-Kanal vom Empfänger auswerten soll, bei hohem Puls ein Relais schalten soll und bei niedrigem das Licht einschalten (LEDs), beim zweiten niedrigen Impuls (also vorher zurück in die Nullstellung) Licht wieder aus.

    Eigentlich läuft das Programm, nur sind beide Funktionen irgendwie auf einem Schaltweg, was ich mir nicht erklären kann.

    Sprich:

    Schalter an Fernsteuerung nach unten -->Relais und Licht an
    Schalter normal -->Relais aus, Licht bleibt an
    Schalter nochmal nach unten -->Relais wieder an, Licht aus

    Also entweder ich lege das Relais jetzt um, oder so wie's eigentlich sein soll reagiert das Licht auf niedrige und keine hohen Impulse...

    Code:
    '===============================================================================
    ' Compiler
    '===============================================================================
     $regfile = "m8def.dat"                                            'Mega8
     $crystal = 1000000                                                '1Mhz Quarz
    '-------------------------------------------------------------------------------
    
    
    '===============================================================================
    ' Ein- und Ausgänge
    '===============================================================================
     Config PortC   = Output                'LEDs
     Config PORTD.4 = Input                 'Empfängersignal
     Config PortD.5 = Output                'Relais
     Config PortD.6 = Output                'Relais
     Config PortD.7 = Output                'Relais
     Config PortB.0 = Output                'Relais
    
    '===============================================================================
    ' Variablen
    '===============================================================================
     Dim Pulsbreite  as byte
     Dim Mindestwert as Byte
     Dim Maxwert     as Byte
     Dim Speicher    as Byte
    '-------------------------------------------------------------------------------
    
    '*******************************************************************************
    '* HAUPTPROGRAMM                                                               *
    '*******************************************************************************
    
    Do
    Speicher = 0
    Wait 2
    
    Anfang:
    Mindestwert = 110                          'Mindestwert festlegen
    Maxwert     = 140                          'Maxwert festlegen
    pulsein Pulsbreite , PIND , 4 , 0         'Pulsbreite auslesen
    
    If Speicher = 0 Then
    PortC = 0
    Else
    PortC = 255
    End If
    
    If Pulsbreite > Maxwert Then               'Pulsbreite auf Maximum testen, wenn
    Portd.5 = 0
    Portd.6 = 0                                 'alle Relaisports aus
    Portd.7 = 0
    Portb.0 = 0
    Else                                       'wenn nicht, dann
    Portd.5 = 1
    Portd.6 = 1                                 'alle Relaisports an
    Portd.7 = 1
    Portb.0 = 1
    End If
    
    
    If Pulsbreite < Mindestwert Then           'Pulsbreite auf Minimum testen
    GoSub Minimum
    End if
    
    waitms 100                                 'Aktualisierungsintervall
    
    Goto Anfang                                'zurück zum Start
    
    loop                                       'sinnlos, aber ohne flennt Bascom
    
    '-------------------------------------------------------------------------------
    'Subroutinen
    
    Minimum:                                    'wenn er unter Minimum ist,
    If Speicher = 0 Then                       'überprüfe ob An oder Aus
    Gosub SpeicherAus
    Else
    Gosub SpeicherEin
    End If
    Return
    
    SpeicherAus:                                'wenn der Speicher Aus war
    Speicher = 1                                'mache ihn an und warte bis
    pulsein Pulsbreite , PIND , 4 , 0          'der Puls wieder normal wird
    IF Pulsbreite < Mindestwert Then
    Gosub SpeicherAus
    End if
    Return
    
    SpeicherEin:                                ' same story nur umgekehrt
    Speicher = 0
    pulsein Pulsbreite , PIND , 4 , 0
    IF Pulsbreite < Mindestwert Then
    Gosub SpeicherEin
    End If
    Return
    
    '-------------------------------------------------------------------------------
    '===
     End
    '===
    Gruß Denis

    edit: ich habe die benötigten Werte für die Pulsweite (die mir "pulsein" ausgibt) mit einem Mega32 an 16Mhz ausgemssen, verändern die sich, wenn ich mit dem Mega8 und internem Quarz arbeite und führen so zu Problemen?

  2. #2
    Benutzer Stammmitglied
    Registriert seit
    20.04.2005
    Alter
    29
    Beiträge
    31
    Habe das Problem nun gefunden.

    Pulsein liefert ganz unterschiedliche Werte, je nachdem, was für ein Quarz verwendet wird.

    Ich hatte die Werte an einem Mega32 mit 16Mhz ausgemessen, diese gelten dann natürlich nicht für einen Mega8 mit internem 1Mhz Quarz.
    Im Test mit Mega32 und 4Mhz habe ich den Fehler nun entdeckt.

    Jetzt müsst ihr mir mal helfen, den Mega8 auf externen Quarz umzustellen.

    Ich benutze das AVR-Studio mit der AVRprog.exe zum beschreiben meiner Controller.

    Wie in Anhang zu sehen steht derzeit "Int RCosc, Frequency 1Mhz"

    Nun gibt es viele Einstellmöglichkeiten, welche muss ich nehmen um einen externen 16Mhz Quarz verwenden zu können?

    Ist "Ext XTal, High frequency" die richtige Wahl, oder reicht einfach "Ext Clock"?

    Danke und Gruß Denis
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken fuses-mega8.jpg   m_glichkeiten.jpg  

  3. #3
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    20.06.2004
    Beiträge
    1.941
    wo wie es aussieht, progs du mit bascom. mi dem Bascom kannst du selbsterklärend den internen takt festlegen unter "lock und fusebits".
    mfg pebisoft

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    20.04.2005
    Alter
    29
    Beiträge
    31
    Proggen schon unter Bascom, aber übertragen mit AVRprog.exe

    Nun habe ich "Ext XTal high frequency" ausgewählt und mir gleich zwei Stück Mega8 kaputt gemacht...

    Zumindest lassen sie sich irgendwie nicht mehr ansprechen, Programm wird auch nicht ausgeführt..

    Quarz und zwei Kerkos gegen GND hängen aber dran...

    Gruß Denis

  5. #5
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    07.02.2005
    Ort
    Wels
    Alter
    55
    Beiträge
    512
    wenn dus mit ponyprog versuchen willst, hier die anleitung.
    mfg knacki

  6. #6
    Benutzer Stammmitglied
    Registriert seit
    20.04.2005
    Alter
    29
    Beiträge
    31
    Ich habe drei Monate mit PonyProg Yaap und co. probiert und keinen einzigen Controller zum laufen bekommen!

    Nun habe ich mir ein Board mit Adapter gekauft und siehe da, mit dem Adapter und den Programmen, kann ich alle µCs, auch auf eigenen Boards programmieren...

    Das sollte jetzt die erste Schaltung werden, die exportiert wird und das habe ich mir anscheinend zu einfach vorgestellt, mit dem Umstellen auf externen Quarz.

    Ich bin immer noch am Probieren, aber ich bekomm die beiden nciht mehr angesprochen, den letzten wollt ich nicht auch noch verheizen, da die Schaltung bis zum Wochenende laufen muss.

    Was mich wundert, wenn ich mich einfach nur ausgesperrt hätte, dann müsste ja das Programm ganz normal laufen...

    Gruß Denis

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •