mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Bekomme AVR 410 nicht zum laufen


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

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
trotz tagelanger Fehlersuche bekomme ich keine RC5-Kommandos aus meinem 
ATmega32 heraus. Als Grundlage habe ich die AVR 410 genommen und auf 
8MHz angepasst. Es scheint so als ob in der Routine "sample" irgend 
etwas mit der Synchronisation nicht richtig läuft weil "er" aus dieser 
Funktion nicht herauskommt. Der Sender funktioniert bei anderen 
RC5-Geräten einwandfrei.
Oder kann es auch daran liegen das es mit diesem Prozessor nicht möglich 
ist?
Danke für jeden Tip!

MfG
Bernd

Autor: Dirk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wo und mit welchem Wert initialisierst Du das Register "flipflop" ?

Autor: Dirk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und wie kommst Du in der Interruptroutine auf 8 MHz bei einem 4 MHz 
Quarz?

Autor: BerndB (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Dirk,

gar nicht! Im ersten Durchlauf hat das Register eine 0x00 daraus wird 
dann 0xFF usw. Die geforderten 64µs werden somit eingehalten.

Autor: Dirk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sorry aber was ist den das für ein MÜLLiger Programmierstil ?

Autor: BerndB (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie meinst du das?

Autor: Dirk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dann lies zum Bsp. schon mal folgenden Thread.

Beitrag "Register nach Reset nicht leer?"

Sollte Dein Register "flipflops" ohne Initisalisierung nicht 0 sein,

so wird Dein Sprungbefehl in der ISR immer den gleichen Weg gehen.
Egal wie oft Du Ihn Komplementierst.

Jeder Wert <>0 gibt als Komplemet <>0

Ich hab mir Deinen Routine noch nicht mal weiter angeschaut und weiss 
auch
noch nicht, ob es das Problem ist aber setze als allererstes mal den
Wert von flipflop am Anfang auf Wert 0.

LDI    flipflop, 0

Autor: Sascha Weber (sascha_w)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
er meint das du ein Register in dem du den Wert (hier 0) erwartest am 
Begin des Programms dieses auch mit dem Wert initialisierst.
Ich meine im Datenblatt noch nicht's darüber gelesen zu haben, das der 
Wert aller Register r0..r31 nach einem Reset null ist.

Sascha

Autor: BerndB (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok danke, habe verstanden, aber es hat leider nicht geholfen.
Im Debug scheint das timing in Ordnung zu sein.

Autor: Dirk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
PortB = output ? ausgegeben auf DDRa ?

hmmmm?



    SER    temp    //PortB = output
    OUT    DDRa, temp//B, temp

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

Bewertung
0 lesenswert
nicht lesenswert
Entschuldigung, habe zu spät bemerkt das ich diese Änderung nicht 
zurückgenommen habe.
Hier mein geänderter Code.
Danke Dirk!

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
BerndB schrieb:
> Hier mein geänderter Code.
Und? Geht der jetzt?

Autor: BerndB (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nein, leider keine Änderung am Ergebnis!

Autor: Sascha Weber (sascha_w)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
woher weist du das es nicht funktioniert?

wenn ich dein Programm sehe
main:    RCALL  detect      //Call RC5 detect routine

      CPI    system, SYS_ADDR//Responds only at the spezified address
      BRNE  release      //Branch if Not Equal (test the Zero flag)

      ANDI  command, 0x3F  //Remove control bit (Logical and Immediate)
                  //Performs the logical AND between the contents of
                  // register Rd and a constant and places the result
                  // in the destination register Rd.
      OUT    PortB, command

      RJMP  main
release:
      CLR    command  
                  //Clear PortB
      OUT    PortB, command
      RJMP  main
dann wird doch eine erfolgreiche Ausgabe an Port B sofort wieder 
gelöscht.

Sascha

Autor: BerndB (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke euch, darf ich euch noch einmal Montag ansprechen weil jetzt die 
Firma dicht macht?

Vielen Dank!
MfG
Bernd

Autor: Dirk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was genau funktioniert denn nicht?

DDRA vs. DDRB ist ja schon ein riesen Unterschied?

Was tut er/es und was nicht?

Mir ist der gesamte Aufbau dieser Routinen sehr suspekt, da das 
eigentlich Signal ausserhalb der ISR "gehandelt wird"

und dann noch mit vollkommen unnötigen 31K250 ints/sec

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.