mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ATMEGA8 Standartoperation(total easy wahrscheinlich)


Autor: Marco Balter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
Ich brauche Hilfe, ich versuche schon seit etlichen Stunden eine 
Standartfunktion zu realisieren aber der ATMEGA8 macht einfach nicht 
dass was ich will, also folgendes:

Ich will einfach den PD0 mit dem PC2, den PD2 mit dem PC1, und den PD3 
mit dem PC0 verbinden.
Dh. lege ich am PD0 ein Rechtecksignal an dann soll am PC2 das selbe 
rechteck herauskommen.
Folgender Fehler:
Wennn ich das rechteck am Ausgang anschaue dann zittert es herum, also 
ich bekomme kein stehendes Bild.
Hier der Quellcode:
while(1)
  {
  if( PIND & (1<<PIND3) )
  {
  PORTC |= (1<<PC0);
  }
  else
  {
  PORTC &= ~ (1<<PC0);
  }

  if ( PIND & (1<<PIND2) )
  {
  PORTC |= (1<<PC1);
  }
  else
  {
  PORTC &= ~ (1<<PC1);
  }

  if ( PIND & (1<<PIND0) )
  {
  PORTC |= (1<<PC2);
  }
  else
  {
  PORTC &= ~ (1<<PC2);
  }

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was meinst du mit Rumzittern? Hast du deinen Versuch schon mit 
unterschiedlichen Eingangsfrequenzen an Port D probiert?

Ich schätze bei niedrigen Eingangsfrequenzen arbeitet das Programm wie 
vorgesehen und je höher die Frequenzen werden, desto mehr machte es die 
Grätsche, weil Berechnungen innerhalb while(1){..} zu lange dauern. BTW. 
mit welcher Taktfrequenz schuftet der Atmega8 - hier müsstet du einen 
möglichst hohen Takt einsetzen, wenn du schnelle Eingangssignale hast 
(Stichwort Abtastrate http://de.wikipedia.org/wiki/Abtastrate).

Autor: Marco Balter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
8 Mhz Takt
max. Eingangsfequenz 50 kHz
Also ich habe am Funktionsgen. gedreht und du hast schon rech bei 
kleinerer Taktfrequenz ist es weniger (1khz) als bei den 50khz.
Was kann ich tun??

Autor: Marco Balter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ach ja, meinen überlegungen zufolge müsste es doch eine konstante 
abweichung geben....

Autor: uwegw (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Takt des externen Signals und der Takt des AVRs laufen ja nicht 
synchron. Daher wird das Signal immer an verschiedenen Punkten 
abgetastet. Wenn nun eine Abtastung ganz knapp vor der steigenden Flanke 
stattfindet, wird diese erst mit einer Zykluszeit Verzögerung erkannt. 
Daher dein Jitter.

Autor: Andreas K. (a-k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sind die 8MHz sicher, oder ist da noch der Vorteiler /8 drin?

Autor: uwegw (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie gesagt, die erste Maßnahme wäre ein möglichst hoher Takt.

Ändert sich das Signal schnell? Wenn nicht, dann könnte man die Frequenz 
messen, aus mehreren Messwerten die Mittelwert bilden und damit ein 
Augangssignal neu erzeugen.

Autor: Marco Balter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Welcher Vorteiler?? Ich habe bei den Fusebits nur das clksel auf 0100 
gestellt....

Autor: Michael G. (linuxgeek) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Marco,

darf man fragen, was das ganze fuer einen Sinn hat, also warum Du das 
Signal nicht einfach direkt auswerten kannst? Vielleicht gibt es ja eine 
bessere Loesung, daher nicht immer nach Umsetzungen fragen sondern das 
Problem in seiner Gesamtheit schildern.

Machst Du mit dem Controller eine Verarbeitung? Moeglicherweise kannst 
Du ein Synchronisationssignal benutzen oder das Signal an einen 
Interrupt-Pin einspeisen. Eine gewisse zeitliche Verzoegerung mit der 
Ausgabe wirst Du allerdings so immer haben, egal wie Du es machst, also 
das Ausgangssignal wird zeitlich leicht versetzt zum Eingangssignal 
sein...

Die Verarbeitung in der Hauptschleife scheint mir keine gute Idee, aus 
oben genannten Gruenden, vor allem aber wenn da noch mehr Code 
dazukommt.

Michael

Autor: Andreas K. (a-k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Welcher Vorteiler?? Ich habe bei den Fusebits nur das clksel auf 0100
> gestellt....

Sorry. Der Mega8 hat keinen. Ich hatte da die neueren Typen wie Mega88 
im Kopf, die einen programmierbaren Vorteiler haben, über den schon 
mancher überraschte Quarz-Anwender gestolpert ist.

Autor: Marcus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Da es sich ja um Rechtecksignale handelt wäre eine Möglichkeit mit 
Capture/Compare zu arbeiten. Allerdings sehe ich dabei auch Nachteile, 
kommt halt auf die Anwendung an.

Marcus

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ein bischen was könntest du mit geschickterer Programmierung machen.

Wenn du weiterhin in der Hauptschleife arbeiten willst, könntest du 
EINMAL den Zustand von PIND holen, die DREI fraglichen Bits 
freimaskieren und anhand des so ermittelten Ergebnisses z.B. über eine 
Tabelle oder switch Anweisung eine Bitmaske für PORTC holen und den 
EINMAL setzen.

Wenn du später(?) noch mehr in der Hauptschleife machen willst und 
dadurch die Gefahr besteht, dass die Abtastung noch unregelmäßiger wird, 
kannst du die Abfrage/Setzen-Schleife auch in einen Timerinterrupt 
packen.

Noch geschickter wäre es, wenn du die Hardware des µC ausnutzt, um z.B. 
einen Interrupt beim Flankenwechsel auszulösen und dann in der 
entsprechenden Interruptroutine darauf zu reagieren.

Ansonsten ist die Frage von Michael G. auch berechtigt ;-)

Autor: Marco Balter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Gesamtaufgabe ist einfach eine Sehr flexiblen Switch zu bauen, der 
PortD wird einmal als ausgang, dann wider als eingang verwendet usw.
Eine Signalanalyse ist nicht sinnvoll da es immer andere Signale 
sind....

Es wäre auch kein Problem wenn die Sinale zeitveretzt sind, jedoch 
sollten alle gleich versetzt sein....

Autor: Marco Balter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe nun nur noch eine if else anweisung drinnen aber es zittert 
immernoch !

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.