Attiny26 macht nicht, was er soll!

Gast #325458
Lesenswert?

Hallo,
liebe Freunde der 20-beinigen Käfer.

Seit längerem lese ich hier im Forum und habe immer eine Antwort
gefunden, nur jetzt stoße ich an

meine Grenzen.

Ich versuche einen Attiny26 in AVRStudio zu programmieren und
anschließend die Hex datei mit ponyprog

 auf den uC zu übertragen.
Das funktioniert auch sehr gut, aber leider macht das Prog nicht das
was es soll.
(ein Wechselblinker an PA5, mit 1,5 sekunden)
Eigentlich sollen die Anforderungen an den attiny26 noch wachsen, aber
wenn das schon nicht läuft...

Die Schaltung habe ich als Anhang eingefügt, vielleicht liegt da
irgendwo der Fehler.
Der Ausgang geht auf einen CMos-Schalter (4066).

Die Fusebits sind alle nicht angehackt außer:
SUT = 10
CKSEL = 0110

Die schaltung soll mit einem 1Mhz quarz laufen.

Wenn ich das Programm raufgeschoben habe, setzt der Tiny die Ausgänge
nur einmal und dann ist Schluss.

Was mache ich nur falsch.
Es wäre sehr net, wenn ihr euch der Sache mal annehmen könntet.
Mich lässt das gefühl nicht los, dass es an dem Tiny liegt.
Danke




.include "tn26def.inc"


ldi r16, 0b00100000
out DDRA, r16 ;PA5 als Ausgang


looping: ;Blink-Schleife

ldi r16, 0b00100000
out PORTA, r16
rcall delay500msec ;0.5 Sekunden warten
rcall delay500msec ;0.5 Sekunden warten
rcall delay500msec ;0.5 Sekunden warten


ldi r16, 0b00000000
out PORTA, r16
rcall delay500msec ;0.5 Sekunden warten
rcall delay500msec ;0.5 Sekunden warten
rcall delay500msec ;0.5 Sekunden warten

rjmp looping

;*********************************************************************** 
****
  delay500msec:
 ldi R16, $12
 WGLOOP0: ldi R17, $BC
 WGLOOP1: ldi R18, $C4
 WGLOOP2: dec R18
 brne WGLOOP2
 dec R17
 brne WGLOOP1
 dec R16
 brne WGLOOP0
 nop
 nop
ret ;wieder zurück ins Hauptprogramm springen
Angehängte Dateien:
Gast #325462
Lesenswert?

Aber bevor du dies alles tust solltest du den Reset Pin am Tiny auf
einen definierten Pegel legen und VCC mit einem Kondensator 100nF
stabilisieren. Wenn du durch deine Fuseseinstellungen nicht gerade den
externen Reset deaktiviert hast ist es sehr wahrscheinlich das sich der
Mikrocontroller ab und zu resetet.
Gast #325464
Lesenswert?

Mein Warteschleifengenerator bringt mir andere Werte bei 500ms und 1Mhz

; =============================
;   Warteschleifen-Generator
;     500000 Zyklen:
; -----------------------------
; warte 499995 Zyklen:
          ldi  R17, $0F
WGLOOP0:  ldi  R18, $37
WGLOOP1:  ldi  R19, $C9
WGLOOP2:  dec  R19
          brne WGLOOP2
          dec  R18
          brne WGLOOP1
          dec  R17
          brne WGLOOP0
; -----------------------------
; warte 3 Zyklen:
          ldi  R17, $01
WGLOOP3:  dec  R17
          brne WGLOOP3
; -----------------------------
; warte 2 Zyklen:
          nop
          nop
; =============================
Gast #325465
Lesenswert?

also ohne stack initialisieren is es kein wunder ^^

.include "tn26def.inc"

.org 0x00
;Stackpointer
ldi r16, RAMEND
out SP, r16

;PB5 als Ausgang
ldi r16, (1<<PB5)
out DDRA, r16

looping: ;Blink-Schleife

ldi r16, (1<<PB5)
out PORTA, r16
rcall delay500msec
rcall delay500msec
rcall delay500msec


ldi r16, (0<<PB5)
out PORTA, r16
rcall delay500msec
rcall delay500msec
rcall delay500msec

rjmp looping

;delay 500000 cycle
delay500msec:
ldi r17, 0x9E
ldi r18, 0x86
ldi r19, 0x01
delay500b:
subi r17, $01
sbci r18, $00
sbci r19, $00
brne delay500b
nop
ret

ok, ich sollte jetzt endlich mal einen artikel veröffentlichen in dem
ich meine smarte delay-routine erkläre, alle wundern sich immer wie das
geht ;)
Gast #325467
Lesenswert?

Oh man, ihr seit ja echt schnell.
Leider kann ich neben der Arbeit nicht so regelmäßig reinschauen.

Aber ich werde mir die Tips mal sehr zu Herzen nehmen.

Leider kann ich nun irgendwie gar nicht mehr auf den Tiny zugreifen.

@wolfram:
Du hast es wohl geahnt, leider ist der nun hin.
Ich muss montag erstmal einen neuen bestellen, da ich keine Mgl. zur
HV-Programmierung habe.
Deshalb kann ich wohl erst mal nicht weiter rum probieren.

Wie wären die Fuses denn richtig, damit ich es nicht wieder versaue?
Danke
Gast #325468
Lesenswert?

Wenn Du schon mit AVR-Studio proggst, warum lädst Du dann die .hex-Datei
mit PonyProg? AVR hat das Programmier-Interface doch schon drin oder
haste wieder mal so´n Gurkenprogrammer Marke Eigenbau?! Bestimmt sind
nun die Fuses verstellt und somit läuft der Tiny nur noch auf externen
Takt. Also schließe mal ´ne externe Taktquelle von >1MHz an den
XTAL1-pin und dann sollte Dein Tiny wieder laufen. Und kauf Dir
gelegentlich mal einen ordentlichen Programmer, der mit AVR-Studio
zusammenarbeitet, dan hast Du mindestens 5 Sorgen weniger - meine
Meinung.
Gast #325469
Lesenswert?

Wie du die Fuses setzen musst kann ich dir nicht sagen, ich benutze das
STK500. Es erspart sehr viel Zeit, insoweit haben sich die 100 Euro
wirklich gelohnt. UND man hat auch einen HV Programmer und ISP
Programmer.
Auch wenn es der Stack war. Wenn du Montag bestellst nimm noch die
Kondensatoren hinzu. Schaltung siehe Datenblatt. Die für AVCC hast du
ja übernommen.
>Die sind zwar für störversuechte Umgebung etwas dünne, aber für's
erste >reicht es.
Ich würde eine selbstgelötete Platine Experimentierplatine aka
Drahtverhau als ziemlich störverseuchte Umgebung bezeichnen. Insoweit
kann man schon allein durch 2 Kondensatoren die Situation sehr
verbessern.
Es macht nicht so richtig Spass wenn man Fehler sucht und die Hardware
schon der Grund sein kann.
Gast #325471
Lesenswert?

So der Tiny ist angekommen und ich habe den Code ausprobiert.
Es lag doch am Stack.
Danke

Mittlerweile habe ich weiter mit dem Tiny rumgespielt und eine serielle
Schnitstelle eingebaut.
Jetzt soll er mir aber noch einen AD-Wert über die UART senden aber die
Werte stimmen nicht so ganz.
Ich habe den Code mal angehängt.
Am ADC0 hängt ein Poti mit dem ich die Spannung zwischen 5V und GND
einstellen kann.
(Der 8-Bit wert reicht mir vorerst.)
Ich nehme die interne Ref.
Den Wert den er mir ausgibt ist (genau) die Differenz zwischen 2,56V
und dem Potiwert, nicht aber zwischen Potiwert und GND wie es
sinnvollerweise sein sollte.
Der Wert ist auch nicht so genau.
Wie genau ist denn der Wandler eigentlich?

Habt ihr noch eine Idee?
Was mach ich blo? falsch?
Danke
Angehängte Dateien:
Gast #325472
Lesenswert?

Die Frage der Genauigkeit ist vieleicht doof gestellt.
Klar hat er eine Genauigkeit von 10bit (oder in meinem Fall nur 8bit).
Ich meinte eher wie dicht der gemessene Wert an dem waren Wert dren
ist, den ich habe jetzt immer eine Abweichung von 0,1V.
Gast #325473
Lesenswert?

>Den Wert den er mir ausgibt ist (genau) die Differenz zwischen 2,56V
>und dem Potiwert, nicht aber zwischen Potiwert und GND wie es
>sinnvollerweise sein sollte.
Poti falsch herum angeschlossen? Falsche Drehrichtung?

>Der Wert ist auch nicht so genau.
>Wie genau ist denn der Wandler eigentlich?
Das steht alles im Datenblatt...
Gast #325474
Lesenswert?

Also das Poti falsch herum kann nicht sein.
wenn ich am ADC-Eingang 1V anlege, dann gibt er mir als Wert die 1,56V
aus. Das ist genau die Differenz zu 2,56V.

Die Abweichungen lese ich dann nochmal nach. Danke
Gast #325478
Lesenswert?

@Rüdi
Mal eine Zwischenfrage: Wie hast du die UART realisiert?
Hardwaremäßig hat der ATTiny26 eine USI, die SPI und I2C kann. Hast du
die UART als software auf einen PIN implementiert?

Gruß mit 3 Fragezeichen

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren