- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Ergebnis 1 bis 9 von 9

Thema: Atmel AT90S2313

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    19.07.2004
    Beiträge
    11

    Atmel AT90S2313

    Anzeige

    Praxistest und DIY Projekte
    Habe da ein Problem, der Atmel hängt sich bei der RC5 Routine scheinbar immer auf. Er Läuft jedenfalls nicht mehr zum Schleifenanfang. Mit einem ATMEGA8515 (auf 8515 kompatibilität gesetzt) läufts...

    Empfänger ist in beiden fällen ein TSOP1736



    Code:
    $regfile = "2313def.dat"
    $crystal = 4000000
    
    CONFIG PinB.2 = OUTPUT
    CONFIG RC5 = PortD.6
    
    DIM Wert AS WORD
    DIM Eichwert1 AS WORD
    DIM Eichwert2 AS WORD
    DIM Eichwert3 AS WORD
    DIM Eichwert4 AS WORD
    DIM Merker AS WORD
    DIM Adresse AS Byte
    DIM Kommando AS Byte
    
    CONST Solladresse = 20
    CONST Einschalten = 129
    CONST Ausschalten = 128
    
    
    
    
    Eichwert1 = GETRC(PinB , 3)
    Wait 3
    
    Eichwert2 = GETRC(PinB , 3)
    Wait 2
    
    Eichwert3 = GETRC(PinB , 3)
    Wait 3
    
    Eichwert4 = GETRC(PinB , 3)
    
    
    SELECT CASE Eichwert1
       CASE IS < 15 :
                   Eichwert1 = Eichwert1 + Eichwert2
                   Eichwert1 = Eichwert1 + Eichwert3
                   Eichwert1 = Eichwert1 + Eichwert4
                   Eichwert1 = Eichwert1 / 4                    ' Mittelwert
                   Eichwert2 = Eichwert1 - 2
                   Eichwert3 = Eichwert1 + 2
       CASE ELSE :
                   Eichwert1 = Eichwert1 / 4
                   Eichwert2 = Eichwert2 / 4
                   Eichwert3 = Eichwert3 / 4
                   Eichwert4 = Eichwert4 / 4
                   Eichwert1 = Eichwert1 + Eichwert2
                   Eichwert1 = Eichwert1 + Eichwert3
                   Eichwert1 = Eichwert1 + Eichwert4            ' Mittelwert
                   Eichwert2 = Eichwert1
                   SHIFT Eichwert2 , RIGHT , 6                  ' /16
                   Eichwert2 = Eichwert1 - Eichwert2            '-1/16
                   Eichwert3 = Eichwert1 + Eichwert2            '+1/16
    END SELECT
    
    
    
    
    
    
    
    
    Merker = 0
    
    DO
    
                Wert = GETRC(PinB , 3)
                WAITms 250
    
                IF Wert < Eichwert1 THEN
                   IF Merker = 0 THEN
                      TOGGLE PortB.2
                      Merker = 1
                   ENDIF
    
                ELSEIF Wert > Eichwert1 THEN
                   IF Merker = 0 THEN
                      TOGGLE PortB.2
                      Merker = 1
                   ENDIF
    
                ELSE
                   Merker = 0
                ENDIF
    
    
                TOGGLE PortB.2
                WAIT 2
                TOGGLE PortB.2
    
    
    
                GETRC5(Adresse , Kommando)
                   IF Adresse = 20 THEN
                      SELECT CASE Kommando
                         CASE 129:
                               SET PortB.2
                         CASE 128:
                               RESET PortB.2
                      END SELECT
                   ENDIF
                WAITMS 250
    
    LOOP
    
    END

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    01.03.2004
    Ort
    Bielefeld (JA, das gibt es!)
    Alter
    35
    Beiträge
    1.614
    Das Probklem ist sehr warscheinlich sehr einfach!

    Du benutzt statt GetRC5 GetRC!

    GetRC iss das mit der entladezeit eines Kondensators und nicht RC5-Code empfangen.

    Martin

    !!!Letzter Beitrag als Ehren Mitglied!!!




    Oh Nein son Mist hab wieder das GETRC5 übersehen...

    Ich nehme alles zurück
    Ich will Microsoft wirklich nicht zerstören. Das wird nur ein gänzlich unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds, Entwickler von Linux

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    19.07.2004
    Beiträge
    11
    Hi,

    weiter unten (oder besser ganz unten) im Code benutze ich GETRC5(Adresse, Kommando)
    Habe nur das ganze Teil gepostet, falls irgendwoanders was hängt...

    Geht übrignes auch nicht, wenn ich nur am Anfang nen Port mit LED einschalte dann den GETRC5 Befehl und die LED wieder ausschalte...

    Das Einschalten geht aber ausgeschaltet wird nicht...
    Chip hat die Bezeichnung AT90S2313-10PI (PI steht soweit ich weiss f.d. Industrieausführung, oder?)

    kann der 2313 (Bzw. ...PI) den GETRC5 Befehl nicht?

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    01.03.2004
    Ort
    Bielefeld (JA, das gibt es!)
    Alter
    35
    Beiträge
    1.614
    Ich glaube ich hab es!

    Der GETRC5 -Befehl arbeitet mit TMR0 zusammen also musst du die Interrupts anschalten!!!

    Enable Interrupts

    So ich hoffe das war jetzt richtig denn dies ist mein erster Beitrag als Robotergenie!!!

    Martin
    Ich will Microsoft wirklich nicht zerstören. Das wird nur ein gänzlich unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds, Entwickler von Linux

  5. #5
    Gast
    Hm...

    werde ich mal ausprobieren, ich glaube aber dass ich das beim ATMEGA nicht gemacht habe, aber kann mich auch irren...

    Danke

  6. #6
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    09.06.2004
    Ort
    Aachen
    Beiträge
    2.674
    Also RC5 läuft auf dem 2313 auf jeden Fall, hab ihn und es geht.
    Vielleicht hlft dir dieses BSP. weiter

    Const Tv = 0

    Config Rc5 = Pind.2
    Portd.2 = 1

    Enable Interrupts

    Dim Address As Byte , Command As Byte

    Do
    Getrc5(address , Command)
    If Address = Tv Then
    Print Address ; " " ; Command
    End If
    Loop

    End
    Wie du siehst wird der RC5-Befehl hier ganz anders benutzt als bei dir.
    hier Getrc5(address , Command) Wo die Signale reinkommen wird ja vorher durch Config Rc5 = Pind.2 festgelegt.
    Daher also kein Wunder, dass das bei dir Probleme gibt, das Beispielpro läuft einwandfrei.

    Allerdings wundert es micht, das Bascom nciht vorher bei GETRC(PinB , 3) eine Fehlermeldung ausspuckt, denn werder PinB noch 3 sind als Varaiblen definiert.

    OK, alles schwachsinn, darin unterscheiden sich die Befhle GetRC5 und GetRC!

    Ich würde es mal mit en GETRC5 Befehlen versuchen, die funktionieren auf jeden Fall!

    EDIT: warum schreibst du .CONFIG RC5 = PortD.6, verwendest später aber immer den Pin B.3?

  7. #7
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    01.03.2004
    Ort
    Bielefeld (JA, das gibt es!)
    Alter
    35
    Beiträge
    1.614
    @RCO: du machst den gleichen Fehler wie ich .

    Ich habe auch erst gedacht er hätte die falschen Befehle benutzt aber du musst mal im unteren Programmteil nochmal genau hingucken!!!

    Martin
    Ich will Microsoft wirklich nicht zerstören. Das wird nur ein gänzlich unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds, Entwickler von Linux

  8. #8
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    09.06.2004
    Ort
    Aachen
    Beiträge
    2.674
    Wie gesagt:

    OK, alles schwachsinn, darin unterscheiden sich die Befhle GetRC5 und GetRC!


    Aber ich würde RC5 auch wirklich mal am gelichen Pin configurieren wie die Signale dann auch reinkommen.

    Ich würde einfach mal eine zusätzliche Led einbauen, die einfach in bestimmten Programmteilen angeht, so kann man das immer weiter nach hinten verschieben, bis man schließlich weiß, bis wo das programm kommt, bzw. wo es hängt.

    MFG Moritz

  9. #9
    Neuer Benutzer Öfters hier
    Registriert seit
    19.07.2004
    Beiträge
    11
    Ich glaube ich hab es!

    Der GETRC5 -Befehl arbeitet mit TMR0 zusammen also musst du die Interrupts anschalten!!!

    Enable Interrupts

    So ich hoffe das war jetzt richtig denn dies ist mein erster Beitrag als Robotergenie!!!
    Haste recht gehabt... beim Atmega hatte ich die Interrupts gesetzt... hab in aller eile aber vergessen die beim 2313 reinzuschreiben, ist ja such irgendwie klar, dass er dann immer hängt...

    Danke nochmals, da wäre ich so schnell nicht drauf gekommen, dachte dann eher an Platinen- bzw. Aufbauprobleme als an nen simplen codefehler ...

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

12V Akku bauen