Probleme beim Programmieren eines ATtiny15 Im Unterforum Microcontroller - Beschreibung: 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
|
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.
|
|
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 20 Beiträge im Durchschnitt pro Tag heute wurden bisher 0 Beiträge verfasst © x sparkkelsputz Besucher : 182393280 Heute : 476 Gestern : 7548 Online : 445 25.11.2024 4:02 0 Besucher in den letzten 60 Sekunden ---- logout ----viewtopic ---- logout ----
|
xcvb
ycvb
0.0650889873505
|