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


von BerndB (Gast)


Angehängte Dateien:

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

von Dirk (Gast)


Lesenswert?

Wo und mit welchem Wert initialisierst Du das Register "flipflop" ?

von Dirk (Gast)


Lesenswert?

Und wie kommst Du in der Interruptroutine auf 8 MHz bei einem 4 MHz 
Quarz?

von BerndB (Gast)


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.

von Dirk (Gast)


Lesenswert?

Sorry aber was ist den das für ein MÜLLiger Programmierstil ?

von BerndB (Gast)


Lesenswert?

Wie meinst du das?

von Dirk (Gast)


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

von Sascha W. (sascha_w)


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

von BerndB (Gast)


Lesenswert?

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

von Dirk (Gast)


Lesenswert?

PortB = output ? ausgegeben auf DDRa ?

hmmmm?



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

von BerndB (Gast)


Angehängte Dateien:

Lesenswert?

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

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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

von BerndB (Gast)


Lesenswert?

Nein, leider keine Änderung am Ergebnis!

von Sascha W. (sascha_w)


Lesenswert?

woher weist du das es nicht funktioniert?

wenn ich dein Programm sehe
1
main:    RCALL  detect      //Call RC5 detect routine
2
3
      CPI    system, SYS_ADDR//Responds only at the spezified address
4
      BRNE  release      //Branch if Not Equal (test the Zero flag)
5
6
      ANDI  command, 0x3F  //Remove control bit (Logical and Immediate)
7
                  //Performs the logical AND between the contents of
8
                  // register Rd and a constant and places the result
9
                  // in the destination register Rd.
10
      OUT    PortB, command
11
12
      RJMP  main
13
release:
14
      CLR    command  
15
                  //Clear PortB
16
      OUT    PortB, command
17
      RJMP  main
dann wird doch eine erfolgreiche Ausgabe an Port B sofort wieder 
gelöscht.

Sascha

von BerndB (Gast)


Lesenswert?

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

Vielen Dank!
MfG
Bernd

von Dirk (Gast)


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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.