mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Assembler Code macht MC defekt?


Autor: Willi Wuff (qwertzinger)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo, immer nachdem in folgenden Programmcode in den MC geladen habe, 
kann ich keinen weiteren Programmcode mehr in den MC uploaden. 
Normalerweise kann man ja einen MC x-beliebige mal wieder beschreiben. 
Ich hab nun einen neuen. Des Programmcode upgeloaded. Das geliche 
Problem. Kann nix mehr uploaden.

Das Programm soll eine Binärzahl in ein Schieberegister einlesen!

MC = Attiny13
Programmierplattform: Atmel Studio 4
(aus Franzis Lernpaket)

Hier der Code:
.include "tn13def.inc"

rjmp Anfang
Anfang:

.def temp1 = r16
.def temp2 = r17
 
.equ SCHIEBE_DDR  = ddrb
.equ SCHIEBE_PORT = portb
.equ RCK          = 3
.equ SCK          = 1
.equ SCL          = 2
.equ SIN          = 0
 
    ldi   temp1, LOW(RAMEND)     ; Stackpointer initialisieren
    out   SPL, temp1

 
;
; Die Port Pins auf Ausgang konfigurieren
;
   ; ldi   temp1, (1<<RCK) | (1<<SCK) | (1<<SCL) | (1<<SIN) ; Anm.1
   ; out   SCHIEBE_DDR, temp1

  sbi   SCHIEBE_DDR,RCK
  sbi   SCHIEBE_DDR,SCK
  sbi   SCHIEBE_DDR,SCL
  sbi   SCHIEBE_DDR,SIN

;
; die Clear Leitung am Schieberegister auf 1 stellen
;
    sbi   SCHIEBE_PORT, SCL
 
;
; Ein Datenbyte ausgeben
;
 loop:   
  ldi   temp1, 0b11010110
    rcall Schiebe
    rcall SchiebeOut
 

    rjmp  loop
 
;-----------------------------------------------------------------------------
;
;Kurze Pause erzeugen
;
SchiebeOut:
  ldi r18,1
Warten_an1:
  ldi r19,255
Warten_an2: 
  ldi r20,255
Warten_an3:
  dec r20 
  brne Warten_an3
  dec r19
  brne Warten_an2
  dec r18
  brne Warten_an1
    ret
 
;-----------------------------------------------------------------------------
;
; 8 Bits aus temp1 an das Schieberegister ausgeben
Schiebe:
    push  temp2
    ldi   temp2, 8             ; 8 Bits müssen ausgegeben werden
 
Schiebe_1:
     ;
     ; jeweils das höchstwertige Bit aus temp1 ins Carry-Flag schieben
     ; Je nach Zustand des Carry-Flags wird die Datenleitung entsprechend
     ; gesetzt oder gelöscht
     ;
    rol  temp1                 ; MSB -> Carry
    brcs Schiebe_One           ; Carry gesetzt? -> weiter bei Schiebe_One
    cbi  SCHIEBE_PORT, SIN     ; Eine 0 ausgeben
    rjmp Schiebe_Clock         ; und Sprung zur Clock Puls Generierung
Schiebe_One:
    sbi  SCHIEBE_PORT, SIN     ; Eine 1 ausgeben
 
     ;
     ; einen Impuls an SCK zur Übernahme des Bits nachschieben
     ;
Schiebe_Clock:
    sbi   SCHIEBE_PORT, SCK    ; Clock-Ausgang auf 1 ...
    cbi   SCHIEBE_PORT, SCK    ; und wieder zurück auf 0
 
    dec   temp2                ; Anzahl der ausgegebenen Bits runterzählen
    brne  Schiebe_1            ; Wenn noch keine 8 Bits ausgegeben -> Schleife bilden
 
    pop   temp2
    ret



Jemand ne Ahnung dazu?

Autor: Michael U. (amiga)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

womit programmierst Du den µC?
was passiert dabei?
Schaltplan?

Am ASM-Programm liegt es sicher nicht.

Gruß aus Berlin
Michael

Autor: Otto (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wahrscheinlich hast Du die Fuses geändert.....

Otto

Autor: Willi Wuff (qwertzinger)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Otto

Da ich Anfänger bin, weiß ich leider nicht was Fuses genau sind. 
Allerdings hab ich in der vorhanden Software (Franzis Lernpaket) ein 
Button namens "Bootloader and Fuses", den man vor dem ersten Gebrauch 
des MCs drücken soll (hierbei soll Reset und Ground miteinander 
verbunden sein).

Ich hab den Button gedrückt und ich kann wieder uploaden.

Weiß jemand ne Erklärung?

Wie hab ich mit dem Programmcode die sog. Fuses manipuliert?

Autor: Otto (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Willi,

nein - mit Deinem Programm eher nicht - es wird an der SW des "Franzis 
Lernpaket" liegen.

Evtl. suchst Du in der Beschreibung mal nach "Fuses".

Ansonsten empfehle ich Dir das Tutorium.

Gruss Otto

Autor: FRAGENSTELLER (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Willi Wuff

möglicherweise hat dein programm den bootloader überschrieben.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Warscheinlich arbeitet das Lernpaket mit nem Bootloader.
Ist keine Applikation geladen, wird der Bootloader immer von neume 
ausgeführt.
Mit Applikation wird der Bootloader nur kurz nach dem Reset ausgeführt 
und dann die Applikation.
Dann muß zum neu laden immer Reset gedrückt werden.


Peter

Autor: Willi Wuff (qwertzinger)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
also ich hab den programmcode (das einzulesene byte) kurz geändert, 
wollte es neu laden wieder gleiches problem.
wieder "bootloader and fuses" gedrückt, trotzdem fehler. Programm 
geschlossen, wieder geöffnet, nochmal button gedrückt. Schon gehts 
wieder.

Als absoluter MC-Laie ist das ganz schön schwierig das nun zu verstehen. 
Vor allem da Bootloader und Fuses eben leider noch Fremdbegriffe für 
mich sind. Hoffe das ändert sich schnell.

Autor: FRAGENSTELLER (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hast du das anleitungsheft schon von a bis z durchgearbeitet?
wenn nicht, mach' es.

Autor: Timmo H. (masterfx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn du ein µC mit Bootloader hast ist der wohl zerschossen. Wenn du ihn 
direkt per ISP programmierst, hast du vielleicht vergessen den 
Flashspeicher vorher zu löschen

Autor: Sinusgeek (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die PC-Software hat ein Timing-Problem. Deshalb gibt es ein Update:
http://www.b-kainka.de/LPmicrosUpdate.zip
Beschrieben ist das z.B. hier:
http://www.b-kainka.de/lpmikros.htm

Nein, ich kenne, besitze und benutze das Franzis-Zeug nicht, habe nur 
mal aus Neugierde diesen Beitrag gelesen und die Kugel befragt.

Autor: pastscho (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der bescheidene Tiny13
ich hasse den Total hab mal 20 von dennen so wie du geschrottet(zumglück 
auf Geschäfts kosten).

Also hab damals auch geguckt was und warum der dadurch nimmer geht und 
bin nach langer suche auch fündig geworden:

Du must den Watchdog explizit ausschalten (warum auch immer)
dann müste es funktionieren

Hab damals die dinger Programmiert und danach ging auch nixmehr nur wenn 
ich es mit nem HVProgrer gemacht habe konnte ich die dinger wider 
ansprechen.

Mein Code war auch einwandfrei er lief ja danach als Probe auch auf nem 
Mega8

also probiers einfachmal mit watchdog ausschalten ganz am anfang von 
deinem programm dann müste es gehen!

mfg
pastscho

Autor: Sinusgeek (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also Watchdog-Probleme hatte ich beim Tiny13 noch nie. Und ich habe 
einige Tiny13 mit unterschiedlichen Eigenbau-Programmen (ASM) im 
Einsatz.

Autor: pastscho (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Probleme mit dem Tiny13 und dem Watchdog treten auch meistens nur 
auf wenn man mit viel warteschleifen arbeitet da kann des so pasieren 
das die sich selbst zu tot aufhängen!

Autor: Sinusgeek (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> wenn man mit viel warteschleifen arbeitet

Nagut, wer Sowas macht, der frisst auch kleine Kinder und steckt Häuser 
an... ;-)

Spaß beiseite, der Tiny13 hat zwar nur einen Timer, der hat aber zwei 
Compare-Units, da erübrigen sich Warteschleifen. Es ist immer besser, 
andere Arbeit zu erledigen oder bis zum nächsten Interrupt zu pennen, 
anstatt in einer Warteschleife Takte zu zählen.

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.