PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : RC-Kanal auslesen mit Bascom, kleiner Fehler



Paisley
10.05.2005, 14:25
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...


'================================================= ==============================
' 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?

Paisley
11.05.2005, 17:29
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

pebisoft
11.05.2005, 21:43
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

Paisley
11.05.2005, 21:46
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

Alter Knacker
11.05.2005, 22:23
wenn dus mit ponyprog versuchen willst, hier (http://www.elektronik-projekt.de/include.php?path=content/articles.php&contentid=29&PHPKITSID=08cefd4d7956abb95ab02e94402a32f9) die anleitung.
mfg knacki

Paisley
11.05.2005, 22:28
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