mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik LED per Fernbedienung schalten (Modellbau)


Autor: toddy80 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo, ich bin erst seit kurzem mit einem Mega8 angefangen zu
programmieren. Habe nun folgendes Problem: Habe meinen Empfänger an den
Mega8 gehängt und will bei einer bestimmten Knüppelstellung eine LED zum
Leuchten bringen. Will das wenn man Spannung anlegt das Board die
Neutralposition lernt. Folgendes ist auszuwerten: es gibt einen Puls
der 1-2 ms lang ist. 1,5ms entsprechen Neutralstellung.
Hier mein Ansatz:

#include <avr/io.h>

void init(void);

int main(void)
{
  unsigned int count=0;
  unsigned int offset=0;

  init();    // Ports deklarieren

  loop_until_bit_is_set(PINC,0);   // Warten bis Signal Anfängt
  while (PINC & (1<<PIN0)) // Zählschleife für Neutralstellung
  {
    offset++;
  }

while(1)        // Endlosschleife
{
  while (PINC & (1<<PIN0))  // Zählschleife für Pulslänge
  {
    count++;
  }

  if (count>offset)// Wenn Knüppel nach oben bewegt wird LEDs an
  {
    PORTB = 0xff;
    count=0;
  }

  else
  {
    PORTB = 0x00;
    count=0;
  }
}
}

// Initialisierung
void init(void)
{
  DDRB = 0xff;  // PortB als Ausgang deklarieren
  PORTB = 0x00;  // Ports auf LOW schalten
  DDRC = 0x00;  // PortC als Eingang deklarieren
  PORTC = 0x00;  // ohne Pull-Up-Widerstände
}

Autor: Karl heinz Buchegger (heinzi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guckst Du zb hier

http://www.hanneslux.de/avr/schaltmo/schaltmodul.html

Schau dich auch sonst bei HanneS um.
Da kriegst du eine Menge Anregungen.

Autor: Rahul Der trollige (rahul)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
... auch ne Möglichkeit.
Solche Sachen macht man aber eher mit dem integrierten Timer.
Der Mega8 hat sogar die Input-Capture-Funktion (ICP), damit lässt sich
sowas sehr einfach realisieren.
Beim ICP lässt man den entsprechenden Timer konstant durchlaufen.
ICP kann auf verschiedene Ereignisse reagieren.
Um Pulslängen (wie in diesem Fall) zu messen, stellt man die steigenden
Flanke ein.
Sobald das Interrupt auftritt bzw. das Ereignis-Flag gesetzt wird (ich
weiß jetzt nicht wie das heisst => Datenblatt [Complete] wirst du eh
brauchen...), liest man den Timerwert aus und setzt das ICP-Dings auf
die fallende Flanke. Sobald diese auftritt, wird erneut der Timer
ausgelesen. Beide Werte zieht man voneinander ab, und schon hat man die
Pulslänge in Taktzyklen. Damit kann man dann sämtliche Modellsteuerungen
dann realisieren.

Siehe auch:
http://www.mikrocontroller.net/forum/read-1-140143.html

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Richtig, mit dem ICP-Ereignis kann man die Impulsbreite wunderbar
messen.

Meine ersten Fernsteuermodule realisierte ich aber mit AT90S1200,
ATtiny12 und ATtiny15. Die hatten nunmal kein ICP. Und da die dort
angewendete Lösung recht stabil arbeitet, habe ich sie auch für den
AT90S2313 (der hat ICP) beibehalten. Die 2313-Version ginge auch
garnicht mit ICP, da sie 4 Kanäle auswertet und nur ein ICP vorhanden
ist.
An das Tastsignal des Empfängers kommt man ja nicht immer heran. Damit
könnte man mit einem ICP alle Kanäle decodieren und Fahrtregler sowie
Schaltfunktionen realisieren.

Mit Mega8 und anderen neueren AVRs habe ich noch keine RC-Impulse
auswerten müssen. Da würde ich heute aber auch ICP nutzen.

...

Autor: Rahul Der trollige (rahul)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Man kann sich natürlich auch ein ICP selber basteln:
Man fragt den Pin nach H-Pegel ab, sobald dieser eingetreten ist, merkt
man sich den Timer-Wert. Dann testet man auf L-Pegel...
Das kann man auch mit mehreren Pins gleichzeitig machen...

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Genau, Polling im Timer-Int. - ICP ist aber eleganter...

...

Autor: Mathias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wenn du etwas geld hast dann kannst du es auch mit einem enOcean
Funkmodul realisieren!

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.