- 3D-Druck Einstieg und Tipps         
Seite 3 von 4 ErsteErste 1234 LetzteLetzte
Ergebnis 21 bis 30 von 34

Thema: AT90S2313 - Timer

  1. #21
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    01.11.2003
    Ort
    Freiburg im Breisgau
    Alter
    36
    Beiträge
    2.624
    Anzeige

    Powerstation Test
    Zitat Zitat von enoritz
    Werd ich mal testen.....

    Nur wozu ist der Wert "start" gut?? Da zählt der doch immer nur 244 Takte??

    //Edit: Schon in ordnung... hab n bisschen rumgerechnet und habs gerafft O:)
    Hi enoritz!
    Freut mich, dass Du den Code verstanden hast! :o)

    Viel Spass noch damit! :o)

  2. #22
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    08.05.2004
    Ort
    Wilhelmshaven
    Alter
    45
    Beiträge
    324
    ich starte mal diesen Thread wieder, da ich zu der Interrupttabelle auch eine Frage habe.
    Sobald ich nach rjmp reset ein reti stehen habe, funktioniert kein Programm. Sobald da nur rjmp reset steht funktionierts. Warum ist es so, wo liegt der Fehler.
    Selbst bei Programmen die keine Interrupts benutzen darf ich keinen reti stehen haben. Also Programme die den Eingang gleich an Ausgang schalten; sprich, das billigste vom billigsten.
    Kann den Fehler einfach nicht finden. AVR Studio gibt keinen Fehler aus und ich möchte auch nicht nach jeder kleinen Änderung den uC neu programmieren. Soll ja angeblich auch nicht unbegrenzt oft funktionieren.

    Code:
    .include "m8def.inc"
    .def temp = r16
    
    rjmp reset ; Reset Handler
    ;rjmp interrupt0 ; IRQ0 Handler
    ;reti ; IRQ1 Handler
    ;reti ; Timer1 Capture Handler
    ;reti ; Timer1 compare Handler
    ;reti ; Timer1 Overflow Handler
    ;reti ; Timer0 Overflow Handler
    ;reti ; SPI Transfer Complete Handler
    ;reti ; UART RX Complete Handler : RXCIE
    ;reti ; UDR Empty Handler
    ;reti ; UART TX Complete Handler
    ;reti ; ADC Conversion Complete Interrupt Handler
    ;reti ; EEPROM Ready Handler
    ;reti ; Analog Comparator Handler
    ;reti
    ;reti
    ;reti
    ;reti
    ;reti
    
    reset:
    	ldi temp, LOW(RAMEND) ;LOW-Byte der obersten RAM-Adresse
    	out SPL, temp
    	ldi temp, HIGH(RAMEND) ;HIGH-Byte der obersten RAM-Adresse
    	out SPH, temp
    
    	ldi r16, 0xFF
    	out DDRC, r16 ; Port C output
    	ldi r17, 0x00 
    	out PORTC, r17 ; Port C LEDs an
    
    ;-----------externer Interrupt enablen--------------
    	ldi r16, 1<<int0
    	out GICR, r16
    	
    	ldi r16, 1<<ISC01
    	out MCUCR, r16
    
    	sei			;global interrupt enable
    ;----------------------------------------------------
    main:
    	loop:
    		rjmp loop
    
    ;----------Interruptprozedur--------------
    interrupt0:
    	com r17
    	out PORTC, r17
    reti
    ;----------------------------------------

  3. #23

  4. #24
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    08.05.2004
    Ort
    Wilhelmshaven
    Alter
    45
    Beiträge
    324
    beide links funktionieren leider zur Zeit nicht.

    Warum hast du eigentlich 2 Warnungen?

    Naja habe erstmal .0rg 0x0000 hinzugefügt. Funktioniert aber immernoch nicht. Die Simulation funktioniert.

  5. #25
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    29.01.2004
    Beiträge
    2.441
    @Lektor
    Kann den Fehler einfach nicht finden. AVR Studio gibt keinen Fehler aus und ich möchte auch nicht nach jeder kleinen Änderung den uC neu programmieren. Soll ja angeblich auch nicht unbegrenzt oft funktionieren.
    Für den Flash-Rom des ATMega8 ist im Datenblatt eine Haltbarkeit von 10.000 Schreib/Lösch-Zyklen angegeben und ein neuer kostet knapp 3 Euro.
    Ich glaube unter dieser Voraussetzung kannst du ruhig auch mal kleinere Änderungen in den Controller schreiben und ausprobieren.

  6. #26
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    08.05.2004
    Ort
    Wilhelmshaven
    Alter
    45
    Beiträge
    324
    hmmmm, das hilft mir leider auch nicht viel weiter

  7. #27
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    08.05.2004
    Ort
    Wilhelmshaven
    Alter
    45
    Beiträge
    324
    so, noch ein Erklärungsversuch

    Code:
    .include "m8def.inc"
    .def temp = r16
    
    ;.org 0x0000
    rjmp reset ; Reset Handler
    ;reti ; IRQ1 Handler
    sei
    
    reset:
    	ldi temp, LOW(RAMEND) ;LOW-Byte der obersten RAM-Adresse
    	out SPL, temp
    	ldi temp, HIGH(RAMEND) ;HIGH-Byte der obersten RAM-Adresse
    	out SPH, temp
    
    	ldi temp, 0xFF
    	out DDRC, temp
    
    	ldi temp, 0x00
    	out DDRD, temp
    
    test:
    	in temp, pind
    	out portc, temp
    rjmp test
    so funktioniert der Code. Sobald ich aber entweder das .org oder reti dazunehme, funktioniert es nicht mehr. Kann mir nicht erklären woran es liegt. Ist einfach nur unlogisch. Bitte helft mir, denn wenn es schon an so einfachen Dingen scheitert, dann kann ich den uC vergessen.

  8. #28
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    20.06.2004
    Beiträge
    1.941
    Warum hast du eigentlich 2 Warnungen?

    einige user mögen meine harten äußerungen nicht und reagieren ein bisschen
    verweichlicht. obwohl diese user es so verdient haben.
    der chef des hauses meint , wenn ich unruhe reinbringe kostet es ein bussgeld. ich kann damit leben mit meinen 57 jahren.
    mfg pebisoft

  9. #29
    Benutzer Stammmitglied
    Registriert seit
    17.07.2004
    Alter
    37
    Beiträge
    81
    RETI holt sich die Adresse vom Stack, von wo aus deine Funktion angesprungen wurde, und springt zu dieser Addresse Zurück. RJMP ist einfach nur ein Sprungbefehl, d.h. es wird keine Addresse mehr auf den Stack gepusht sondern der Program-Counter wird einfach auf einen neuen Wert gesetzt. So entsteht der Fehler beim Reti nach dem Sprung auf Reset. Auf dem Stack steht überhaupt keine Addresse, wo hingesprungen werden kann.

  10. #30
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    08.05.2004
    Ort
    Wilhelmshaven
    Alter
    45
    Beiträge
    324
    wie muß ich den jetzt den Code ändern das es funktioniert? Deine Erklärung hört sich für mich so an als müßte ich die Stackinitialiesung noch vor der Interrupttabelle setzen; das habe ich aber noch nie gesehen. Ich habe ja alles nur aus Tutorials kopiert und diese Interrupttabelle sieht man ja auch praktisch in jedem Programm.
    Bin schon langsam am überlegen ob ich nicht auf C umsteige weil mir diese kleinen unerklärlichen Probleme den ganzen Spaß rauben.

Seite 3 von 4 ErsteErste 1234 LetzteLetzte

Berechtigungen

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

Labornetzteil AliExpress