Probleme beim Programmieren eines ATtiny15

Im Unterforum Microcontroller - Beschreibung: Hardware - Software - Ideen - Projekte

Elektronik Forum Nicht eingeloggt       Einloggen       Registrieren




[Registrieren]      --     [FAQ]      --     [ Einen Link auf Ihrer Homepage zum Forum]      --     [ Themen kostenlos per RSS in ihre Homepage einbauen]      --     [Einloggen]

Suchen


Serverzeit: 06 10 2024  14:57:03      TV   VCR Aufnahme   TFT   CRT-Monitor   Netzteile   LED-FAQ   Osziloskop-Schirmbilder            


Elektronik- und Elektroforum Forum Index   >>   Microcontroller        Microcontroller : Hardware - Software - Ideen - Projekte


Autor
Probleme beim Programmieren eines ATtiny15

    







BID = 340664

Humus

Aus Forum ausgetreten
 

  



Hallo,

ich habe heute mittag ein kleines Programm für einen ATtiny15 geschrieben und wollte es eben auf den ATtiny laden.

In die Anleitung geschaut wie ich den uC zu Programmieren beschalten muss dann die Verbindung zwischen AVR-Studio und STK500 hergestellt.

Das Programmieren des Flashs funktioniert nicht bzw. ich kann nicht auf den uC schreiben, auch keine Fuses setzen.

Das löschen funktioniert

Laut der Anleitung kann man den uC mit ISP Programmieren man muss nur PB5 mit RST von PORTE verbinden. Wenn ich auf ISP Programmieren gehe, funktioniert nichts, kann dann auch keine Daten auslesen(wie z.B. die Fuses gesetzt sind), kann noch nicht mal löschen, wenn ich auf Parallel/High voltage Serial gehe kann ich die Fuses auslesen und den uC löschen.

Woran könnte das liegen?

Im anhang mal ein Screenshot der Fehlermeldung beim Programmieren des Flashs.
Die erste Fehlermeldung ist bei ISP und die zweite beim Hight Voltage

schon mal vielen dank...






BID = 344797

Humus

Aus Forum ausgetreten

 

  


So das Problem hat sich erledigt, Fehler gefunden.

Der Fehler lag an einer Falschen beschaltung bzw. an einer Falschen jumper stellung!

Jetzt habe ich aber ein weiteres Problem beim ATtiny 15

ich habe ihn jetzt Programmiert und in die Schaltung ein gebaut, aber es Funktioniert nichts!


Hier den Source:

Code :
; Prozessor definieren 

.NOLIST
.INCLUDE "tn15def.inc" ; ATtiny15
.LIST

; Register definieren
.DEF temp = R16
.DEF zaehler = R17

.CSEG ; Hier beginnt das Code-Segment
.ORG 0x00 ; Die Adresse auf Null


; Hauptprogramm
main:

ldi temp, 0b11111110 ; Ein- und Ausgangspins configurieren
out DDRB, temp ; PINB0 Eingang PINB1-5 Ausgang

ldi temp, 0x00 ; Alles Ausschalten
out PORTB, temp

; loop (Endlosschleife zum Abfragen des Tasters)
loop:

sbic PINB, 0
rjmp delay

; loop2 (Zweite Abfrage des Tasters)
loop2:

sbic PINB, 0
rjmp an_aus
rjmp loop

; delay (warte Schleife zum entprellen des Tasters)
delay:

ldi zaehler, 0x64

wait:

dec zaehler
brne wait

rjmp loop2

; an_aus (Überprüfen Ausgänge Überprüfen und An- oder Ausschalten)
an_aus:

sbic PORTB, 1
rjmp aus
rjmp an

; an (schalte Ausgänge An)
an:

ldi temp, 0b11111110
out PORTB, temp

rjmp loop

; aus (schalte Ausgänge Aus)
aus:

ldi temp, 0x00
out PORTB, temp

rjmp loop



Funktion: an PB0 ist ein Taster an 5V geschaltet mit dem Sollen die restlichen PB Ein- bzw Ausgeschaltet werden.

Vielleicht findet ihr da ja ein fehler?

An die Ausgänge kommte eine LED mit Vorwiderstand an Masse.


BID = 344810

DonComi

Inventar



Beiträge: 8605
Wohnort: Amerika


Hallo Humus,

Ich kann dir nur empfehlen, das anders zu machen (ohne deinen Source exakt betrachtet zu haben).

ldi r16, 1
ldi r17, 1

loop: sbis/sbic pinb,0
rjmp loop
rcall entprellen ;Taste entprellen, am besten eine Zählerschleife
rcall taste
rjmp loop

taste: ;Unterprogramm, wenn Taste gedrückt wurde.
eor r16, r17 ;XOR r16 und r17 = invertiert Bit 0 von r16
out portb, r16
ret

;irgendwo im Code:
entprellen:
...
ret


Edit: Ich glaube, war etwas am Problem vorbei. Sry, bin ein wenig verplant... Aber mit EOR, und darauf kommt es mir an, kannst du Bits gezielt invertieren
(übrigens Register nie direkt im Quellcode verwenden, immer Alias (-se?))

_________________

BID = 344813

clembra

Inventar



Beiträge: 5404
Wohnort: Weeze / Niederrhein
ICQ Status  


Könnte schon daran liegen, dass der Pull-Up des Eingangs deaktiviert ist.
Probier mal

ldi temp, 0x01
out PORTB, temp

den rest hab ich mir noch nicht angeguckt...

_________________
Reboot oder be root, das ist hier die Frage.

BID = 344816

DonComi

Inventar



Beiträge: 8605
Wohnort: Amerika


OK, es ist immer schwer, so den Fehler zu finden. Hast du einen Pull-Up-R drin? Wenn nein, dann liegts daran:

ldi temp, 0b11111110

out PORTB, temp

(Damit deaktivierst du den internen Pullup.)

Außerdem solltest du Bits, wie ich oben schrieb, mit EOR invertieren, Spart Code

_________________

BID = 344831

Humus

Aus Forum ausgetreten


@Don

ich weiß das Programm ist nur so hin geschlampt, aber ich wollte eigentlich nur mal ausprobieren, ob das in einer Schaltung mit LED Funktioniert, aber mit dem ATtiny15 und diesem Programm funktioniert das nicht.

Mit einem ATtiny 2313 mit dem geleichen Programm funktioniert es.

Woran liegt das denn?

Edit: hab eben erst gesehen das schon so viele antworten sind.

Ich habe einen externen Pull Down Widerstand an den Eingang gesetzt, weil ich mit einem High signal schalten möchte.

[ Diese Nachricht wurde geändert von: Humus am 27 Jun 2006 19:42 ]

BID = 344834

DonComi

Inventar



Beiträge: 8605
Wohnort: Amerika


Das kann ich dir so nicht sage, durch die ganzen Sprünge in deinem Programm will ich jetzt nicht durchsteigen .

also, wie ich oben frage, benutzt du einen externen Pullup, oder den internen? Der wird nur dann aktiviert, wenn DDRxn 0 ist, und PORTxn 1 ist.

Und 2x wird in deinem Programm das Bit von PORTB0 gelöscht. Das heißt, der Eingang hängt offen.

Einen anderen Grund kann ich nicht finden, ich bin momentan etwas blockiert (gewisse Umstände...).

Was besser ist: Taster pollen, bei Änderung zu einem Unterprogramm hüpfen (mit rcall), dabei aber nicht vergessen, den Stackpointer zu initialisieren. Rcall mit einem ret verlassen.

Edit: Dein µC hat glaube ich garkeinen SRAM, dann vergiss alles wieder...


Wenn du auf steigende Flanke reagieren willst, dann umschreibe das nicht so kompliziert, sondern machs logisch:


loop: sbis pinb,0 ;skip if bit in IO set
;ansonsten
rjmp loop ;endlos
loop1:
sbic pinb,0 ;warte, bis taste wieder losgelassen
rjmp loop1
;so nun ist Taste losgelassen, weiter:
rcall entprellen ;entprellen
rcall tastegedrueckt
rjmp loop


;irgendwo im Programm:
tastegedrueckt: ....... ret
;hier wird nur hingehoppst, wenn die Taste 1. gedrückt wurde, 2. wieder losgelassen wurde.

(ist Geschmackssache, aber ich warte immer, bis die Taste losgelassen wird )


_________________

BID = 344838

Humus

Aus Forum ausgetreten


Also bei dem Tiny15 kann man nicht mit rcall Arbeiten, da er kein SRAM hat, sonst hätte ich das ja getan!

Ich habe einen externen Pulldown widerstand, weil ich mit einem High signal schalten möchte. Wenn ich einen Pullup widerstand habe muss ich doch mit einem LOW signal schalten oder?

na ja ich werde jetzt noch einmal die internen Pullups einschalten... und dann versuch ich es noch einmal


BID = 344843

Humus

Aus Forum ausgetreten


Also vielleicht stehe ich gerade ja voll auf dem Schlauch oder du hast mich falsch verstanden?!

Ich hab den befehl sbic gewählt, da ich einen Pulldown widerstand extern habe. Er soll bei einem LOW signal den befehl

rjmp an_aus

überspringen und im loop weiter auf ein High signal warten, wenn ein High signal kommt springt er erst in "delay" dann in "an_aus"

So sollte das ganze doch richtig sein, oder?

wenn ich sbis nehmen würde, würde er mir jedes mal bei einem High signal alles überspringen was er nicht soll.

Das mit dem definierten Pegel ist mir schon klar, da sich da eventeulle Fehler einschleichen können, also somit die Schaltung Störungsanfällig ist.

Vielleicht könnte mich einer Aufklären wo da jetzt etwas falsches in meiner Denkweise ist?

BID = 344849

DonComi

Inventar



Beiträge: 8605
Wohnort: Amerika


So funktioniert das auch. (müsste es zumindest...)

Ich habe dich wohl falsch vertanden am Anfang.

Aber du programmierst echt umständlich

Edit: probier mal den code:

Code :

.include "tn15def.inc"



.def temp = r16
ldi r17, 0b11111110
ldi r18, 0b11111110

ldi temp, 0b11111110
out DDRB, temp

clr temp
out PORTB, temp

loop: sbic PINB, PINB0 ;Schauen, ob Taster gedrückt ist
rjmp loop ;Wenn nein, dann nicht...

rjmp entprellen

entprellen:

/*
folgender Entprellcode
*/
rjmp invertieren




invertieren:

eor r17, r18 ;alle bits, außer dem letzten, invertieren
out PORTB, r17
rjmp loop



(Du musst noch nen Entprellcode selbermachen, ist aber leicht. Sollte ca. 20ms überbrücken!)


_________________

BID = 345797

Humus

Aus Forum ausgetreten


Moin,

danke für den Source. Ich werde mir das auch mal zu Herzen nehmen, dass ich umständlich Programmiere! =)

Hast ja schon recht, hab das halt einfach nur schnell geschrieben!

Ich hab mich da gestern abend auch noch mal an das ganze Ran gesetzt, jetzt Funktioniert die Schaltung auch mti dem ATtiny15, ich hab den Reset auf +5V gelegt und somit hat es dann funktioniert.

Das sind immer so Sachen an die man nicht gleich denkt, vorallem, da es mit dem ATtiny 2313 funktioniert hat.

Na ja aus Fehlern lernt man.


Zurück zur Seite 0 im Unterforum          Vorheriges Thema Nächstes Thema 


Zum Ersatzteileshop


Bezeichnungen von Produkten, Abbildungen und Logos , die in diesem Forum oder im Shop verwendet werden, sind Eigentum des entsprechenden Herstellers oder Besitzers. Diese dienen lediglich zur Identifikation!
Impressum       Datenschutz       Copyright © Baldur Brock Fernsehtechnik und Versand Ersatzteile in Heilbronn Deutschland       

gerechnet auf die letzten 30 Tage haben wir 19 Beiträge im Durchschnitt pro Tag       heute wurden bisher 2 Beiträge verfasst
© x sparkkelsputz        Besucher : 182134509   Heute : 2880    Gestern : 5445    Online : 588        6.10.2024    14:57
5 Besucher in den letzten 60 Sekunden        alle 12.00 Sekunden ein neuer Besucher ---- logout ----viewtopic ---- logout ----
xcvb ycvb
0.0492668151855