-         

Ergebnis 1 bis 7 von 7

Thema: Anfänger kommt mit Atmel328 nicht klar

  1. #1

    Anfänger kommt mit Atmel328 nicht klar

    Anzeige

    Hi,
    habe mir ein BabyOrangutan B-328 zwecks Motoransteuerung zugelegt und mache erste Schritte mit Assembler und AVR-Studio4,
    Programmer MK2 auch gleich mitgekauft.
    Bis zum eigentlichen Zweck - Motorsteuerung - bin ich noch garnicht vorgedrungen, bin zur Zeit noch fasziniert von all den Möglickeiten,
    die der 328 bietet. Habe etwas mit Zeitschleifen gespielt, "Hello World" mittels eines Blinkprogramms vollzogen und übe jetzt mit Timern und
    Interrupts. Hier nun mein Problem: Timer0 läuft mit Simulator und F11, Compare OCR0 ist mit einem Wert geladen aber sobald ich TIMSK0
    aufrufe kommt bei "Build" die Meldung "out of range" und nichts geht mehr, wenn ich aber OCIE im Simulator manuell setze, läuft die Chose
    und eine ISR wird ordnungsgemäß ausgeführt, im Programm kann ich aber weder TIMSK noch OCIE setzen.
    Wahrscheinlich läßt sich dies wortreich geschilderte Problem mit enem "Kick" lösen, leider ist mir eine Erleuchtung bisher verschlossen
    geblieben.
    Hat jemand meine konfusen Gedanken verstanden und weiß, was ich mache, vergessen habe oder falsch mache? Dann bitte die Lösung
    verraten.

    vielen Dank im voraus
    ulli

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    20.08.2008
    Ort
    Karlsruhe
    Alter
    29
    Beiträge
    1.221
    Vermutlich ist eine andere Berechnung "out of range", kannst du Mal die vollständige Build-Ausgabe zusammen mit deinem Code hier zeigen?

    mfG
    Markus

  3. #3
    ;Hier der Code mit "Build"-Ergebnis, out of range bezieht sich aber doch eindeutig
    ;auf TIMSK0 - oder nicht??
    ;Gruß
    ;Ulli

    .include"m328Pdef.inc"

    ;Übungen mit Timer und Interrupts
    .def temp = r16


    .org 0x0000
    rjmp main ; Reset Handler
    .org 0x0020
    rjmp timer0_overflow ; Timer Overflow Handler

    ldi temp,0x01
    ; out TIMSK0, temp
    main:
    ldi temp, HIGH(RAMEND) ;Stack initialisieren
    out SPH, temp
    ldi temp, LOW(RAMEND)
    out SPL, temp

    ldi temp,0xC1 ;clock wählen
    out TCCR0B, temp

    ldi temp, 0x20 ;beliebigen Wert in Timer0
    out TCNT0, temp

    ; ldi temp,0x3B ;für Compare Match,
    ; out OCR0B, temp ;geht aber auch nicht, nur wenn TOIE manuell
    ;im Simulator gesetzt wird, krieg es aber im
    ;Programm nicht hin: TIMSK0 out of range
    ldi temp,0x01
    out TIMSK0,temp ;kann auch hier stehen, ist egal
    sei

    loop:
    rjmp loop

    timer0_overflow:
    sbi portD,4 ;der Overflow Handler.
    reti ;geht auch nicht mit Timer0 Comp (addr. 0x001E)
    Copyright (C) 1995-2009 ATMEL Corporation

    C:\Dokumente und Einstellungen\Besitzer\Desktop\Programme\timer3.as m(1): Including file 'C:\Programme\Atmel\AVR Tools\AvrAssembler2\Appnotes\m328Pdef.inc'
    C:\Dokumente und Einstellungen\Besitzer\Desktop\Programme\timer3.as m(31): error: Operand 1 out of range: 0x6e

    Assembly failed, 1 errors, 0 warnings

  4. #4
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    26.11.2004
    Beiträge
    451
    ersetz das out mal durch sts

    dir sagt ja schon die fehlermeldung an was es liegt. "out of range" mit dem OUT befehl kannst du nur die ersten 32(?) I/O Register ansteuern. Zahl weiß ich grad nicht ganz genau, steht aber in der hilfe irgendwo erklärt. Was du auf jeden Fall suchst ist der STS Befehl.

  5. #5
    Danke, das war es. muß den Schritt nochmal nachvollziehen, wär nicht drauf gekommen.
    Ist das nur bei (oder ab) 328 so?

    Gruß
    Ulli

  6. #6
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    26.11.2004
    Beiträge
    451
    Kann dir nur sagen, das es auch beim kleineren 168er so is, mit mehr hab ich auch noch nicht richtig "spielen" können.

  7. #7
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    7.557
    Zitat Zitat von robin
    ersetz das out mal durch sts .. mit dem OUT befehl kannst du nur die ersten 32(?) I/O Register ansteuern ...
    Zitat Zitat von ulli328
    ... das war es ... wär nicht drauf gekommen. Ist das nur bei (oder ab) 328 so ...
    @ulli328 - vermutlich gehörst Du zu den Abenteurern und Glücksrittern, die ohne Datenblatt arbeiten. Im 8271C–AVR–08/10 steht auf Seite 537 im Instruction Set Summary: OUT ... Out Port und STS ... Store Direct to SRAM. Und obs nur beim 328er ist ? Guck mal die anderen Datenblätter nach, dann weißt Du es. Oder mal überlegen . . . .
    Ciao sagt der JoeamBerg

Ähnliche Themen

  1. Komme mit Basic nicht klar, C gewünscht
    Von fchriis im Forum Robby CCRP5
    Antworten: 2
    Letzter Beitrag: 28.04.2010, 15:38
  2. Asuros Motor kommt nicht in die Gänge
    Von Magelan1979 im Forum Asuro
    Antworten: 9
    Letzter Beitrag: 18.01.2010, 20:14
  3. Anfänger kommt nicht weiter.
    Von Rick07 im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 7
    Letzter Beitrag: 23.02.2008, 17:10
  4. Anfängerfrage? - Serieller Interrupt kommt nicht!!!
    Von Zentauro im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 5
    Letzter Beitrag: 01.10.2007, 11:36
  5. Komme mit FETs nicht klar
    Von i-mon im Forum Elektronik
    Antworten: 16
    Letzter Beitrag: 07.10.2006, 07:30

Berechtigungen

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