mikrocontroller.net

Forum: Compiler & IDEs ATMEGA16 8bit-Timer Problem


Autor: Stefan (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

habe folgendes Problem:
Ich möchte an einem ATMEGA16 ein Signal ausgeben und dann wieder an
einem ATMEGA16 einlesen. Um verschiedene Signale über dieselbe Leitung
schicken zu können, wollte ich das mit dem 8-Bit Timer machen. Nun habe
ich jedoch das Problem, dass am definierten Pin gar kein Signal
herauskommt! Bin um jeden Tip dankbar ^^.

MfG Stefan

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Deine delay-Funktion wird nicht das tun, was du erwartest, sofern du
Optimierungen einschaltest. Dann wird sie nämlich komplett
wegoptimiert. Das könnte auch dein Problem sein. Das Signal kommt
vermutlich aus dem Port raus, ist aber nur so kurz, daß du es gar nicht
bemerkst. Was hast du gegen die delay-Funktionen der avr-libc?

Übrgiens sind delay-Loops möglichst zu vermeiden. Lange
Interrupt-Funktionen auch. Die Kombination aus beidem ist natürlich
besonders zu vermeiden, da du damit den Prozessor komplett blockierst.
Für einen ersten Test oder wenn der Prozessor eh sonst nichts tun soll,
ist es aber evtl. ok.

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich will ja eigentlich 2 pulse schicken und dann den Abstand messen
(also die zeit, in der das Signal low ist).
Wie bekomme ich das am Besten hin? Den ersten Puls wollte ich ja 50000
Takte lang "high" haben, deshalb das delay.

Autor: Dirk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

delay's in Interrupts sollt man vermeiden bzw. garnicht anwenden.
Am besten haelt man die ISR so kurz wie moeglich.

Du solltest einfach ein flag setzen und in der Main Routine dieses Flag
abfragen.

Quik & Dirty Example:

ISR(OVF)
{
  timer_cnt++;
  if (timer_cnt == 10)
     { status_byte |= (1<<LEDON);}
}

int main(void)
{
  if (status_byte & (1<<LEDON))
  {
    // DO ANYTHING
    status_byte &= ~(1<<LEDON);
  }
}

Gruß,
Dirk

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.