mikrocontroller.net

Forum: Projekte & Code Hilfe bei Atmega16-Manual-Lekture gesucht


Autor: Egon Müller (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich habe vor Jahren einen Atmega16 so programmiert, daß er bei Anlegen
der Versorgungsspannung mit seiner Programmausführung startet.
Ich meine, der Volksmund nennt dies "Power-On-Reset".

Nun würde ich gern via JTAG etwas am Programm ändern, also sollte der
Programmstart unterbleiben.
Ich habe das Manual durchforstet, aber nirgends gefunden, wie man den
automatischen Start verhindern kann, wenn er mal installiert ist.
Selbst ein Reset bringt da wohl nichts, denn danach läuft das Programm
sofort an.
Leider habe ich meine Unterlagen nicht zur Hand.

Kann mir vielleicht jemand helfen und schreiben, wo im Manual so etwas
beschrieben ist.

Autor: Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Darum kümmert sich der JTAG-Programmer schon ganz alleine.
Dazu muß man diesen im stromlosen Zustand mit der Zielschaltung
verbinden. Wenn man dann die Zielschaltung unter Strom setzt, übernimmt
der JTAG mit der Programmiersoftware das Kommando.

Autor: Egon Müller (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo, Rahul,
 vielen Dank für Deine Antwort.
Daß JTAG den direkten Zugriff auf den Atmega16 erlaubt, erleichert mich
etwas. Leider kann ich es z.Zt. nicht ausprobieren, denn mein
Olimex-JTAG funktioniert im Augenblick nicht, jedenfalls leuchtet die
LED schon mal nicht. Ob es an der neuen Version von AVRStudio (4.12)
liegt, die keine Verbindung herstellen kann?

Aber noch eine Frage zum automatischen Programmstart: Ist das
hardwareseitig verursacht (wie z.B. beim Motorola xxxHC12, wo man einen
Pin definiert ansteuern mußte, um den automatischen Programmstart zu
erreichen), oder wird das softwareseitig erreicht?
Denn, wenn ich das mit dem JTAG nicht hinkriege, müßte ich mein Glück
mit TwinAVR probieren, wo nach meiner Erinnerung eine Fehlermeldung
kommt, wenn das Programm läuft.
Gruß
Egon

Autor: peter dannegger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"ich habe vor Jahren einen Atmega16 so programmiert, daß er bei Anlegen
der Versorgungsspannung mit seiner Programmausführung startet."

Das kannst Du nicht programmieren, das ist automatisch so.

Nur CPUs mit einem Bootloader fragen einen Pin ab, z.B. die Philips
LPC2xxx-Serie.

Die einzige Möglichkeit, den Programmstart zu verhindern, ist den
Resetpin permanent auf Low zu halten.


"Nun würde ich gern via JTAG etwas am Programm ändern"

Irgendwie beschleicht mich das Gefühl, daß Du bisher noch garnichts mit
AVRs gemacht hast.

Der einfachste Weg etwas zu ändern ist nämlich, sich einfach die alten
Sourcen zu schnappen, die Änderungen zu machen, neu compilieren und
dann rüberbraten.

Ansonsten kannst Du ohne den Flash zu löschen nur 1-Bits auf 0 setzen,
wenn nicht die nötigen Fuses und Lockbits das generell verbieten.


Peter

Autor: Psychoelvis (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also ich nutzte ein Boart mit 3 Tastern am PORT A Pin 0-1 und 2
(ADC0,ADC1,ADC2) Das Prog was ich da drauf habe wurde mit Assamper
erstellt und wen der µC Strom bekommt wartet er bis der Taster 1
gedrück wird und läft erst dann.

;********************************************
;*** Testprgramm für L293D
;********************************************

.include "m16def.inc"

.def temp  = r16
.def temp2  = r17
.def temp3  = r18
.def temp4  = r19


.equ Treiber= PortC
.equ Treiber_DDR= DDRC

.equ enable1= 0
.equ enable2= 1

.equ motor1_A=2
.equ motor1_B=3

.equ motor2_A=4
.equ motor2_B=5


.equ Taster1= 0

.equ LED1  = 2
.equ LED2  = 3



;PortC als Ausgang schalten
  ldi temp, 0xFF
  out Treiber_DDR, temp

  ldi temp, 0x00      ;alles ausschalten
  out Treiber, temp

;PortA als Eingang schalten
  ldi temp, 0x00
  out DDRA, temp

  ldi temp, 0xFF      ;pullups aktivieren
  out PortA, temp

;PortB als Ausgang schalten
  ldi temp, 0xFF
  out DDRB, temp

  ldi temp, 0b00001100
  out PortB, temp



;Stackpointer initialisieren
  ldi temp, LOW(RAMEND)
  out SPL, temp
  ldi temp, HIGH(RAMEND)
  out SPH, temp



main:
  cbi PortB, LED2

  sbis PinA, Taster1    ;wenn Taster gedrückt wird Befehle ausführen
  rcall go_baby_go

rjmp main





go_baby_go:

  cbi PortB, LED1    ;grüne LED anmachen und warten
  rcall wait

  sbi PortB, LED2    ;rote LED ausschalten



  rcall motor_vor


  rcall motor_bremsen


  rcall motor_zurueck

  rcall motor_bremsen


  rcall motor_rechts

  rcall motor_bremsen


  rcall motor_links


  rcall motor_bremsen



  rcall motor_aus
  sbi PortB, LED1    ;grüne LED aus

reti





;****** Befehle ********

Motor_vor:
  cbi PortB, LED1
  sbi PortB, LED2

  sbi Treiber, motor1_A    ;Richtung einstellen
  cbi Treiber, motor1_B

  sbi Treiber, motor2_A
  cbi Treiber, motor2_B


  sbi Treiber, enable1    ;Motor1 aktivieren
  sbi Treiber, enable2    ;Motor2 aktivieren
  rcall wait

reti




Motor_zurueck:

  cbi PortB, LED1
  sbi PortB, LED2

  cbi Treiber, motor1_A    ;Richtung einstellen
  sbi Treiber, motor1_B

  cbi Treiber, motor2_A
  sbi Treiber, motor2_B


  sbi Treiber, enable1    ;Motor1 aktivieren
  sbi Treiber, enable2    ;Motor2 aktivieren

  rcall wait
reti




Motor_rechts:
  cbi PortB, LED1
  sbi PortB, LED2

  sbi Treiber, motor1_A    ;Richtung einstellen
  cbi Treiber, motor1_B

  cbi Treiber, motor2_A
  sbi Treiber, motor2_B


  sbi Treiber, enable1    ;Motor1 aktivieren
  sbi Treiber, enable2    ;Motor2 aktivieren

  rcall wait

reti




Motor_links:

  cbi PortB, LED1
  sbi PortB, LED2

  cbi Treiber, motor1_A    ;Richtung einstellen
  sbi Treiber, motor1_B

  sbi Treiber, motor2_A
  cbi Treiber, motor2_B


  sbi Treiber, enable1    ;Motor1 aktivieren
  sbi Treiber, enable2    ;Motor2 aktivieren

  rcall wait

reti


Motor_bremsen:

  cbi PortB, LED1
  cbi PortB, LED2

  cbi Treiber, motor1_A    ;Richtung einstellen
  cbi Treiber, motor1_B

  cbi Treiber, motor2_A
  cbi Treiber, motor2_B


  sbi Treiber, enable1    ;Motor1 aktivieren
  sbi Treiber, enable2    ;Motor2 aktivieren

  rcall wait


reti



Motor_aus:
  cbi Treiber, motor1_A    ;Richtung einstellen
  cbi Treiber, motor1_B

  cbi Treiber, motor2_A
  cbi Treiber, motor2_B


  cbi Treiber, enable1    ;Motor1 aktivieren
  cbi Treiber, enable2    ;Motor2 aktivieren
reti




wait:

  ldi temp, 255
  ldi temp2, 255
  ldi temp3, 2    ;52
  ldi temp4, 2    ;2

  wait_loop:

    dec temp
    brne wait_loop

    dec temp2
    brne wait_loop

    dec temp3
    brne wait_loop

    dec temp4
    brne wait_loop

reti

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Das Prog was ich da drauf habe wurde mit Assamper
> erstellt und wen der µC Strom bekommt wartet er bis der Taster 1
> gedrück wird und läft erst dann.

Das hat aber nichts mit dem Original-Problem zu tun und ist
besten falls missverständlich.


> wartet er bis der Taster 1
> gedrück wird und läft erst dann.

Der µC läuft ständig. Nur sagt ihm der erste Teil des Programmes
zu warten bis der Taster gedrückt wurde. Da läuft genauso ein
Programm ab. Wenn dann der Taster kommt, wird ein anderer Teil
des Programmes ausgeführt.

Autor: Psychoelvis (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gut dan habe ich das mißverstnaden! Mit dem Rest haste recht laufen tuht
der immer.

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
übrigens ist das "reti" totaler quatsch in dem code..

Mehr Fehler hab ich beim überfliegen nicht gefunden..

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.