mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Attiny13 Empfängersignal auswerten


Autor: Florian _____ (florian_bk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich bin neu hier und mehr oder weniger zufällig vor einigen Tagen auf 
dieses Forum gestoßen...für den Fall, dass diese Frage in genau dieser 
Form schon gestellt wurde, sorry, aber so auf beim "Überfliegen" habe 
ich nichts gefunden, was mir weiterhelfen konnte.

Ich will mit einem Attiny13 ein Servosignal von einem Empfänger auslesen 
und damit in Abhändigkeit von der Servorstellung (genauer: das 
Drosselservo) eine Glühkerzenheizung steuern, die sich bei geringer 
Motordrehzahl zunehmend dazuschaltet. Die Regelung funktioniert auch 
schon, wenn ich die Eingabe über +/- Taster vornehme. Um das ganze über 
den Empfänger zu steuern habe ich also eine ISR geschrieben, die über 
den Timer die Impulslänge misst...und da fängt das Problem schon an :) 
Ich schau jetzt schon ein paar Stunden in den Code und kann die Ursache, 
dass die ISR nicht Triggert nicht sehen.

Die Register sehen folgendermaßen aus: (Takt ist 4,8Mhz)

PCMSK |=(1<<PCINT4);
GIMSK |=(1<<PCIE);
sei();
Und das ist die ISR:
ISR(PCINT_vect)    {
  if (PINB>=16)  {
    TCCR0B = (0<<CS02)|(1<<CS01)|(1<<CS00);
    TCCR0A = (0<<WGM01)|(0<<WGM00)|(0<<COM0A1)|(0<<COM0A0);
    TCNT0=0;
    while(PINB>=16)  {}
    temp=TCNT0;
  }
}


Grüße
Florian

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ist zwar schon ein paar Tage her, aber weil noch keiner geantwortet hat 
melde ich mich mal.

Du willst also auf bestimmte Servostellungen reagieren. Dazu könntest Du 
Die mal mein Schaltmodul mit Tiny15 ansehen und an Deine Ansprüche 
anpassen. http://www.hanneslux.de/avr/mobau/schaltmo/schaltmodul.html

Viel Erfolg...

...

Autor: Rahul Der trollige (rahul)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>  if (PINB>=16)  {
>    TCCR0B = (0<<CS02)|(1<<CS01)|(1<<CS00);
>    TCCR0A = (0<<WGM01)|(0<<WGM00)|(0<<COM0A1)|(0<<COM0A0);
>    TCNT0=0;
>    while(PINB>=16)  {}
>    temp=TCNT0;

Dein Controller hängt 1-2ms in der ISR fest. Das ist nicht wirklich 
schön...
Guck lieber nach, welchen Pegel der Pin hat (kann man schön mit "if 
(PINB & 16)..." machen.), und entscheide dann, ob du den Timer startest 
oder ihn ausliest.

Also so:
ISR(PCINT_vect)
{
  if (PINB & (1<<4)
  {  // steigende Flanke detektiert => Timer starten
      TCCR0B = (0<<CS02)|(1<<CS01)|(1<<CS00);
      TCCR0A = (0<<WGM01)|(0<<WGM00)|(0<<COM0A1)|(0<<COM0A0);
      TCNT0=0;
  }
  else
  {
     temp=TCNT0;
     Flags |= PulsendeFlag;
  }
}

Flags ist dabei eine Variable, in der man Bits setzen kann, wenn man 
sich einen bestimmten Zustand merken will und zwischen verschiedenen 
Programmteilen (sehr kleine) Informationen austauschen will.

Im Hauptprogramm kann man dann ganz einfach mit "if (Flags & 
PulsendeFlag)..." herausfinden, ob ein Impuls aufgetreten ist - 
natürlich sollte man dann per "Flags &= ~PulsendeFlag;" die Flag 
zurücksetzen, damit man auch weitere Pulse ausmessen kann...

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.