Vorab: Ich bin ein absoluter Neuling auf dem Thema Mikrocontroller. Natürlich habe ich mich im Netz umgesehen, aber so ganz steige ich noch nicht durch diesen kryptischen Assembler durch. Mir schwebt folgender Ablauf vor: Nach etwa einer Sekunden (nach dem Einschalten) soll der ATtiny15L für 500ms ein Reed-Relais (über einen N-HexFet - PB4) schalten. Keine Wiederholung, kein erneuter Reset. Aktuell habe ich mir für den Assembler im groben folgenden Ablauf vorgestellt: - Laden der "tn15def.inc" - Definition irgendwelcher Register - Reset - Timer 1000ms - Relais einschalten (PB4) - Timer 500ms - Relais ausschalten (PB4) Weiß jemand Rat oder kann mir helfend unter die Arme greifen? Grüße Axel
Gast
#1723142
Hi Axel, du kannst auch BASCOM (BASIC-Compiler) statt Assembler nutzen. Als Anfänger und für dieses kleine Projekt tust du dir bestimmt leichter zum Ziel zu kommen. Schau mal auf www.mcselec.com. Hier bekommst du eine Demoversion mit der du ohne Probleme den Tiny15 proggen kannst.
Gast
#1723143
..Lösch- Diode muß parallel zur Relais- Spule liegen.. Man kann auch mit Kanonen auf Spatzen schießen. Ich würde das lieber mit einem PC und einer Relaiskarte machen...!
Gast
#1723194
An den Relais-Kontakten befinde sich ein Reed-Relay COMUS 3563.1231.053 mit einer Diode parallel zur Spule. ;-) Die Diode LL4148 kann als Schutzdiode angesehen werden, die sich bereits auf der Platine befindet (Schaltung basiert auf einer ELV-Schaltung).
Elektronix schrieb: > Hi Axel, > > du kannst auch BASCOM (BASIC-Compiler) statt Assembler nutzen. Als > Anfänger und für dieses kleine Projekt tust du dir bestimmt leichter zum > Ziel zu kommen. Schau mal auf www.mcselec.com. Hier bekommst du eine > Demoversion mit der du ohne Probleme den Tiny15 proggen kannst. So, ich habe den Tipp beherzigt und es mal mit BasCom versucht: ############################ $regfile = "ATtiny15.DAT" $tiny $crystal = 1600000 'Relais an PB4 Config Portb.4 = Output 'Warte 1500 ms Waitms 1500 'Relais Ein (HIGH) Portb.4 = 1 'Warte 500 ms Waitms 500 'Relais Aus (Low) Portb.4 = 0 End ############################# Bekommen beim 'Syntax check' folgende Fehlermeldung: Error:22 Line: 20 Out of SRAM space ,in File... Ich glaube, BasCom ist für den Tiny15 nicht geeignet. Zumal der Tiny kein SRAM hat, sondern nur 32 Rechenregister als Speicher.
Axel L. schrieb: > Elektronix schrieb: >> Hi Axel, >> >> du kannst auch BASCOM (BASIC-Compiler) statt Assembler nutzen. Als >> Anfänger und für dieses kleine Projekt tust du dir bestimmt leichter zum >> Ziel zu kommen. Schau mal auf www.mcselec.com. Hier bekommst du eine >> Demoversion mit der du ohne Probleme den Tiny15 proggen kannst. > > So, ich habe den Tipp beherzigt und es mal mit BasCom versucht: > > ############################ > $regfile = "ATtiny15.DAT" > $tiny > $crystal = 1600000 Das stimmt aber leider erst, wenn Du den Tiny15 kalibriert hast, ab Werk läuft der mit irgendwas um die 1,0...1,2 MHz. Neuere AVRs (Tiny13, Tiny25) kalibrieren den Oszillator beim Reset selbst. Bei Tiny12 und Tiny15 muss man das noch von Hand erledigen. > > 'Relais an PB4 > Config Portb.4 = Output > > 'Warte 1500 ms > Waitms 1500 > > 'Relais Ein (HIGH) > Portb.4 = 1 > > 'Warte 500 ms > Waitms 500 > > 'Relais Aus (Low) > Portb.4 = 0 > Hier sollte eigentlich eine Endlos-Schleife hin, da der Controller sonst von vorn beginnt. Ob der Befehl "End" das macht, weiß ich nicht, könnte aber sein. Do Loop > End > ############################# > > Bekommen beim 'Syntax check' folgende Fehlermeldung: > Error:22 Line: 20 Out of SRAM space ,in File... > > Ich glaube, BasCom ist für den Tiny15 nicht geeignet. Eben, Hochsprachen brauchen auf AVRs SRAM. Und SRAM gibt es beim Tiny15 nicht. Der Waitms-Befehl nutzt SRAM für die Warteschleifen. > Zumal der Tiny > kein SRAM hat, sondern nur 32 Rechenregister als Speicher. Das ist aber erstmal kein Makel. Es gibt Leute, die haben mit den wenigen Ressourcen des Tiny15 komplexe Dinge realisiert wie z.B. DCC-Lokdecoder, RC-Fahrtregler mit Bremslicht und Rückfahrlicht. Warum klammerst Du Dich eigentlich an den Tiny15? Hast Du sie vorrätig? Wenn nicht, dann nimm den neueren und inzwischen billigeren Tiny13, der hat 64 Byte SRAM und damit läuft dein Bascom-Programm. Außerdem ist sein Oszillator bereits kalibriert, was Dir unnötige Arbeit spart. Er ist (im Fachhandel) auch besser verfügbar als der Tiny15. MfG, Consulter
Gast
#1724465
Gut, ich gebe mich geschlagen :-/ Ich habe seinerzeit den Tiny13 geproggt. Mit dem gehts ohne Probleme, da er 64bytes SRAM besitzt. Du kannst aber auch in BASCOM mit Assembler arbeiten, schau mal nach $ASM. Im Forum gibts auch irgendwo ein paar Beispiele für Zähl- bzw. Warteschleifen in Assemblercode.
Gast
#1724483
Axel L. schrieb: > Bekommen beim 'Syntax check' folgende Fehlermeldung: > Error:22 Line: 20 Out of SRAM space ,in File... > > Ich glaube, BasCom ist für den Tiny15 nicht geeignet. Zumal der Tiny > kein SRAM hat, sondern nur 32 Rechenregister als Speicher. Habe keine grosse Ahnung von Bascom, aber man soll unter "Options", "Programmer", "Compiler" den HW-Stack und SW-Stack auf z.B. "4" o. ä. einstellen ... Ralf2008
Elektronix schrieb: > Gut, ich gebe mich geschlagen :-/ Das musst Du nicht. Das war doch eine gute Vorlage zum Zeigen was nicht geht. ;-) > Ich habe seinerzeit den Tiny13 geproggt. Mit dem gehts ohne Probleme, da > er 64bytes SRAM besitzt. > Du kannst aber auch in BASCOM mit Assembler arbeiten, schau mal nach > $ASM. Im Forum gibts auch irgendwo ein paar Beispiele für Zähl- bzw. > Warteschleifen in Assemblercode. Naja, um vollständig in ASM zu arbeiten, braucht es kein Bascom, da kann man dann gleich im Avrstudio4 arbeiten. Wenn man die Warteschleifen selbst programmiert, könnte es vielleicht gehen. Man müsste probieren, ob man mit dem Zusatz "Overlay" zum Befehl "Dim" die Variablen in den Adressbereich der Register (0 bis 31) zwingen kann. Nur zur Info für Axel: SRAM beginnt ab Adresse 96. MfG, Consulter
Gast
#1724498
Klar geht das, man muss nur wissen wie :D Ob's Sinn macht, sich mit einem ATiny15 in Verbindung mit Bascom rumzuquälen sei dahingestellt.
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
Fehlerursache war übrigens, daß Bascom für Stack und Frame, falls nicht im Code definiert, die Standardeinstellungen aus den Optionen nimmt, und wenn da irgendetwas > 0 drinsteht, dann beschwert sich der Compiler.
Prima!!! Wieder was gelernt (was ich wohl selbst nie brauchen werde). MfG, Consulter
Gast
#1724539
> Wieder was gelernt (was ich wohl selbst nie brauchen werde). Man weis nie, wofür's gut ist :D Hier noch eins: > Man müsste probieren, ob man mit dem Zusatz "Overlay" zum Befehl > "Dim" die Variablen in den Adressbereich der Register (0 bis 31) > zwingen kann. Das nennt sich IRam
1 | |
oder für ein definiertes Register, hier R15:
1 | |
Danke....
MWS schrieb: > Klar geht das, man muss nur wissen wie :D > Ob's Sinn macht, sich mit einem ATiny15 in Verbindung mit Bascom > rumzuquälen sei dahingestellt. >
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
> Fehlerursache war übrigens, daß Bascom für Stack und Frame, falls nicht > im Code definiert, die Standardeinstellungen aus den Optionen nimmt, und > wenn da irgendetwas > 0 drinsteht, dann beschwert sich der Compiler. Ok, läuft in BasCom. Es lag tatsächlich an diesen Werten. Grrrrrrr Aber... im Simulator brauchen die 1500ms bzw. 500ms gefühlte 2,5 bzw. 0,5 min. Die Do-Loop-Schleife ist nicht notwendig, da der Zyklus nur einmal durchlaufen werden soll.
Gast
#1724774
> Die Do-Loop-Schleife ist nicht notwendig, da der Zyklus nur einmal > durchlaufen werden soll. Dann mach an's Ende ein Do/Loop, ist guter Programmierstil, damit der µC in einen definierten Zustand rein läuft. Freut mich, daß es geht, ich muss gestehen, daß ich neugierig war wie der Code sich auf einem echten Tiny15 verhält. Denn ich hab' mir den erzeugten Assemblercode angesehen und Bascom bastelt ein paar PUSH/POP beim Aufruf der Waits rein. PUSH/POP sind Anweisungen, die auf den Stack zugreifen, einen Stack im klassischen Sinn hat der Tiny15 aufgrund fehlenden SRams nicht und ihm gehen deshalb auch diese Anweisungen im Befehlssatz ab, er läuft also in ungültigen Opcode. Aber scheinbar werden die dann als NOP gewertet und er geht einfach drüber. > im Simulator brauchen die 1500ms bzw. 500ms gefühlte 2,5 bzw. 0,5 min. Das ist normal, im AVR Studio verhält es sich ähnlich. Wenn Du simulieren willst, setz' ein $SIM an den Codeanfang, dann werden die Verzögerungsschleifen leer gelassen. Nur im richtigen Code nicht vergessen das $SIM wieder rauszunehmen.
Gast
#1724829
Hast du die Schaltung so wie im Plan aufgebaut, und es funktioniert? Denn einige Bauteilewerte sind ziemlich gewagt ... (z.B. der Abblock-C mit 1nF, der 100nF haben sollte; auch der Widerstand am Eingang der 5V kann je nach Stromaufnahme des Relais problematisch werden) Übrigens muss am Programm-Ende bei BASCOM keine Do-Loop Schleife stehen; auch beim "End" wird eine Endlos-Schleife auf sich selbst generiert. Auch werden Assembler-Inlines nicht immer 1:1 von BASCOM übernommen. Ich hatte dort mal einen Assembler-Befehl mit einem ungültigen Register verwendet, aber statt einer Fehlermeldung hatte BASCOM diesen Befehl durch eine gültige ASM-Sequenz ersetzt ...
Gast
#1724849
> hatte dort mal einen Assembler-Befehl mit einem ungültigen Register > verwendet, aber statt einer Fehlermeldung hatte BASCOM diesen Befehl > durch eine gültige ASM-Sequenz ersetzt ... Das passiert bei Registern im extended IO, die z.B. per IN/OUT nicht mehr erreicht werden können, die werden dann durch LDS/(ORI/ANDI)/STS ersetzt. Hat aber einen Pferdefuß. Das ist aber beim vorliegenden Tiny15 ganz sicher nicht von Belang. > Übrigens muss am Programm-Ende bei BASCOM keine Do-Loop Schleife stehen; > auch beim "End" wird eine Endlos-Schleife auf sich selbst generiert. Nun ja, End macht sogar noch mehr, es löscht auch das globale Interruptflag. Wenn man also den Code beenden, aber noch Interrupts im Hintergrund weiter laufen lassen möchte, so nimmt man doch besser Do/Loop, da weis man was man hat :D Wobei das aufgrund nicht vorhandener Interrupts natürlich hier auch nicht wirklich wichtig ist...
AVRuser schrieb: > Hast du die Schaltung so wie im Plan aufgebaut, und es funktioniert? > Denn einige Bauteilewerte sind ziemlich gewagt ... > (z.B. der Abblock-C mit 1nF, der 100nF haben sollte; auch der Widerstand > am Eingang der 5V kann je nach Stromaufnahme des Relais problematisch > werden) Gerade mit mySmartUSB light und myAVR ProgTool die bin-Datei auf den Tiny15 geschoben und mit dem Board getestet. Zwar nur mit 4,5V, aber dies liegt in der Spezifikation. Das Relais schaltet ohne zu murren, aber es schaltet sofort und nicht erst nach 1,5 Sekunden für 0,5 Sekunden. Wo liegt der Fehler? Dachte erst, dass mein N-HexFet durch ist, aber ohne Tiny tut sich nichts. ;-) Also liegt es am Tiny selber. Habe ich High mit Low verwechselt?
Gast
#1725103
10K pull down Widerstand gegen Masse an das Gate des MOSFET. Sorgt dafür das der MOSFET sicher sperrt, wenn der AVR sich im Reset befindet, wo die IO-Pins auf Eingang geschaltet sind und das Gate des MOSFETs in der Luft "hängt".
Gast
#1725226
> Also liegt es am Tiny selber. Habe ich High mit Low verwechselt?
Also Deine HW ist nicht so der Hit, das sind schon hässliche
Betriebsbedingungen für einen µC. Jedoch könnten hier die ungültigen
Opcodes ein Problem bereiten, Bascom ist da sicher nicht für den Tiny15
optimiert.
Nimm mal folgenden Code, getestet und garantiert frei von schädlichen
Opcodes :D
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
37 | |
38 | |
39 | |
40 | |
41 | |
42 | |
43 | |
44 | |
45 | |
46 | |
47 | |
48 | |
49 | |
50 | |
51 | |
52 | |
53 | |
54 | |
Wobei wir wieder bei Assembler sind.... ;-)
Ralf schrieb: > 10K pull down Widerstand gegen Masse an das Gate des MOSFET. > Sorgt dafür das der MOSFET sicher sperrt, wenn der AVR sich im > Reset befindet, wo die IO-Pins auf Eingang geschaltet sind und > das Gate des MOSFETs in der Luft "hängt". Gut, habe faktisch zwischen Pin2 und Pin4 einen 10k eingesetzt zum Test. Resultat: Die Schaltung macht gar nichts mehr. Dabei ist es egal ob ich das letzte Programm von MWS nehme oder nicht. Ohne 10k Widerstand schaltet das Relais sofort (egal welches Programm). Rätsel über Rätsel. ???? Man steckt leider nicht im Tiny, um zu sehen was er macht. Grrrr
Gast
#1725386
> Wobei wir wieder bei Assembler sind.... ;-)
War das Mittel der Wahl um auszuschließen daß es möglicherweise an der
SW scheitert. Wobei nach Lösung der HW Geschichte mich schon
interessiert, ob die erste, ausschließliche Basic Lösung auch geht.
Zur HW, ich denke nicht, daß die Versorgung des Tiny so ok ist, die
Spannung wird kurz einbrechen, sobald das Relais schaltet, das reicht
um "ungewöhnliche" Reaktionen zu erzeugen. Deshalb würde ich die µC
Stromversorgung vom Relais entkoppeln, also Diode von + nach 10µF
Kondensator parallel zu VCC/GND, und parallel auch noch'n 100nF dazu.
Modifizier' den Code so, daß Du ein Wechseln bekommst, also die
Geschichte in die Loop rein und dann messen, ob der Pinzustand an PB4
wechselt. Ohne Relais testen !
Gast
#1725411
sicher dass die schaltung mit 1,6mhz läuft? Zähl mal die nullen im Bascom Programm.
MWS schrieb: >> Wobei wir wieder bei Assembler sind.... ;-) > > War das Mittel der Wahl um auszuschließen daß es möglicherweise an der > SW scheitert. Wobei nach Lösung der HW Geschichte mich schon > interessiert, ob die erste, ausschließliche Basic Lösung auch geht. > > Zur HW, ich denke nicht, daß die Versorgung des Tiny so ok ist, die > Spannung wird kurz einbrechen, sobald das Relais schaltet, das reicht > um "ungewöhnliche" Reaktionen zu erzeugen. Deshalb würde ich die µC > Stromversorgung vom Relais entkoppeln, also Diode von + nach 10µF > Kondensator parallel zu VCC/GND, und parallel auch noch'n 100nF dazu. > > Modifizier' den Code so, daß Du ein Wechseln bekommst, also die > Geschichte in die Loop rein und dann messen, ob der Pinzustand an PB4 > wechselt. Ohne Relais testen ! Das Relais zieht max. 250mA, aber doch erst nach 1,5 Sekunden und nicht vorher. Der Witz ist ja, der Tiny scheint sich selber nur als Stromleitung zu sehen. Es darf doch nicht sein, dass ein µC beim Einschalten alle Ausgänge auf High setzt. Da wären schnell alle Computer hinüber.
Axel L. schrieb: > Es darf doch nicht sein, dass ein µC beim Einschalten alle Ausgänge auf > High setzt. Das macht er ja normalerweise auch nicht. Woher nimmst Du diese Aussage? Hast Du zum Test LEDs (natürlich mit Vorwiderständen) an die Portpins angeschlossen? Oder hast Du Die Ports mit einem Logiktester, Oszilloskop oder Logik-Analyzer beobachtet? Wenn man im Schaltungsdesign und der Programmierung Anfänger ist (was ja jeder von uns einmal war), dann begnügt man sich erstmal mit LEDs an den Ausgängen, deren Vorwiderstände so dimensioniert sind, dass die Ströme unter dem erlaubten Limit bleiben. > Da wären schnell alle Computer hinüber. Wie soll ich diese Aussage verstehen? Was haben Computer mit einem falsch programmierten, falsch beschalteten oder durch vorherige Falschprogrammierung oder Falschbeschaltung beschädigten Mikrocontroller zu tun? Und ja, die Dinger gehen auch mal kaputt, wenn man ihnen zuviel zumutet. MfG, Consulter
Gast
#1725550
> sicher dass die schaltung mit 1,6mhz läuft? Zähl mal die nullen im > Bascom Programm. Nö, Millihertz sicher nicht ;-) 5 Nullen, entsprechend: 1.600.000 Der letzt Code verwendet ein eigenes Delay, da wäre es völlig egal welchen Wert man reinschreibt. Axel: > Es darf doch nicht sein, dass ein µC beim Einschalten alle Ausgänge auf > High setzt. Da wären schnell alle Computer hinüber. Tut er ja auch nicht, von selber setzt der gar keine Leitungen auf High, laut Simulator auch nicht. Aber ich ahne da was, probier folgendes:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
37 | |
38 | |
39 | |
40 | |
41 | |
42 | |
43 | |
44 | |
45 | |
46 | |
47 | |
48 | |
49 | |
50 | |
51 | |
52 | |
53 | |
54 | |
55 | |
56 | |
57 | |
58 | |
59 | |
60 | |
61 | |
62 | |
63 | |
@MWS: Danke für Deine Mühe. Habe aber nun folgendes Unternommen: Meine bisherigen Versuche wurden mit einem Primitivnetzteil unternommen. Ich habe es im Verdacht für die sofortige Relais-Schaltung verantwortlich zu sein. Daher bin vom Netzteil auf Batterie (4,5V), wie es später ungefähr sein soll, gewechselt. Auch habe ich mich mal im Assembler versucht und dies hier ist dabei herausgekommen: ----------------------------------- .equ F_CPU= 1600000 .include "tn15def.inc" .CSEG .ORG 0x0000 rjmp Part1 ; POWER ON RESET reti ; IRQ0 handler reti ; Pin change handler reti ; Timer1 Compare Match reti ; Timer1 overflow handler reti ; Timer0 overflow handler reti ; EEPROM ready handler reti ; Analog Comperator handler reti ; ADC Conversion handler Part1: ; Spannung an PB anlegen. ldi r16, 0xFF out DDRB, r16 ; PORTB configured for output ldi r16, 0xFF out PORTB, r16 ; LEDs ausschalten Part2: ; Warten für 1500ms ca. 1500000 Zyklen ldi R17, $08 WGLOOP0: ldi R18, $F8 WGLOOP1: ldi R19, $FB WGLOOP2: dec R19 brne WGLOOP2 dec R18 brne WGLOOP1 dec R17 brne WGLOOP0 Part3: ; Spannung auf Pin2 (PB4) für 500ms ca. 500000 Zyklen sbi PORTB, 4 ldi R17, $0F WGLOOP3: ldi R18, $37 WGLOOP4: ldi R19, $C9 WGLOOP5: dec R19 brne WGLOOP5 dec R18 brne WGLOOP4 dec R17 brne WGLOOP3 cbi PORTB, 4 ende: rjmp ende ---------------------------- Resultat: Nichts! Es tut sich nichts. Da das Auslesen und Schreiben auf den ATtiny15 klappte, muss die Ursache woanders liegen. VCC und GND haben Kontakt. Kann es sein, das der Takt wesentlich niedriger ist als angenommen?
Axel L. schrieb: > ldi r16, 0xFF > out DDRB, r16 ; PORTB configured for output Richtig... > ldi r16, 0xFF > out PORTB, r16 ; LEDs ausschalten Falsch, wenn die LEDs gegen GND angeschlossen sind, was die folgenden Zeilen vermuten lassen, denn 0xff schaltet alle Ports auf H-Pegel.... > Part3: > ; Spannung auf Pin2 (PB4) für 500ms ca. 500000 Zyklen > sbi PORTB, 4 > cbi PORTB, 4 > Resultat: Nichts! Es tut sich nichts. > Da das Auslesen und Schreiben auf den ATtiny15 klappte, muss die Ursache > woanders liegen. VCC und GND haben Kontakt. Kann es sein, das der Takt > wesentlich niedriger ist als angenommen? Ja, weil die Kalibration fehlt. Je nach Exemplar kann der Takt unkalibriert etwa von 800 kHz bis 1,5 MHz betragen. Das ist aber nicht die Ursache, damit müsste es trotzdem gehen. MfG, Consulter
Kluchscheißender Consulter schrieb: > Axel L. schrieb: > >> ldi r16, 0xFF >> out PORTB, r16 ; LEDs ausschalten > > Falsch, wenn die LEDs gegen GND angeschlossen sind, was die folgenden > Zeilen vermuten lassen, denn 0xff schaltet alle Ports auf H-Pegel.... Kleiner Schreibfehler. Muss eher Schalttransistor heißen, wobei die Source gegen GND angeschlossen ist. Kluchscheißender Consulter schrieb: > > Ja, weil die Kalibration fehlt. Je nach Exemplar kann der Takt > unkalibriert etwa von 800 kHz bis 1,5 MHz betragen. Das ist aber nicht > die Ursache, damit müsste es trotzdem gehen. Und wie lässt sich diese Kalibration einbinden?
Gast
#1726376
Das Kalibrationsbyte (z.B. 0x6F) mit dem Programmer auslesen und in das OSCCAL-Register schreiben. z.B.:
1 | |
2 | |
Oder in den Flash o. das EEPROM schreiben und dort auslesen. Das ist aber wie schon erwähnt nicht das Problem (oder die Lösung) ...
Gast
#1726475
Kuckst Du :D Untenstehenden Code hab' ich als Tiny15 compiliert und in einen Tiny25 (hab' keinen Tiny15 hier) geschrieben. Das geht, weil die relevanten Register dieselbe Adresse im IO haben und auch keine Interrupts benutzt werden. Code funktioniert wie gewünscht, hier das Schalten in einer Endlosschleife zum Testen. Auch hab' ich die RCALLs raus genommen. Der Code ist im übrigen mit dem für einen Tiny25 erzeugten Code exakt gleich. Schau mal auch in Deiner Bascom Version nach, ob Du unter Compiler->Optionen->Output einen Haken in "Swap words" drin hast. Bei meinem Programmer (STK500) darf keiner drin sein, denn sonst ist das Hexfile unbrauchbar. Wie es sich mit myAVR ProgTool verhält, kann ich nicht sagen, mach' mal probehalber einen Haken rein, wenn keiner drin ist. Angehängt auch noch das erzeugte Hexfile.
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
37 | |
38 | |
39 | |
40 | |
41 | |
42 | |
43 | |
44 | |
45 | |
46 | |
47 | |
48 | |
49 | |
50 | |
51 | |
52 | |
53 | |
54 | |
55 | |
56 | |
57 | |
58 | |
59 | |
60 | |
61 | |
62 | |
63 | |
64 | |
65 | |
Axel L. schrieb: > Und wie lässt sich diese Kalibration einbinden? Bitte schau auch mal ins Datenblatt des Controllers. Und auch mal bei Atmel nach einschlägigen AppNotes. Die AppNote AVR053 behandelt z.B. das Thema Oszillator & Calibration. Die AppNotes findest Du hier: http://www.atmel.com/dyn/products/app_notes_v2.asp?family_id=607 Desweiteren ist das Thema Calibration hier im Forum schon einigemale recht umfassend diskutiert worden. Vielleicht solltest Du Dich mal mit der Suchfunktion befassen. http://www.mikrocontroller.net/search?query=calibration+tiny15&forums%5B%5D=1&forums%5B%5D=19&forums%5B%5D=9&forums%5B%5D=10&forums%5B%5D=2&forums%5B%5D=4&forums%5B%5D=3&forums%5B%5D=6&forums%5B%5D=17&forums%5B%5D=11&forums%5B%5D=8&forums%5B%5D=14&forums%5B%5D=12&forums%5B%5D=7&forums%5B%5D=5&forums%5B%5D=18&forums%5B%5D=15&forums%5B%5D=13&forums%5B%5D=16&max_age=-&sort_by_date=0 MfG
Da wohl mein MOSFET beschlossen hatte sich zu verabschieden habe ich den IRF 3205 TO220 IR eingesetzt, aber es tut sich nach wie vor nichts. Den Tiny kann ich ohne Probleme mit mySmartUSB auslesen und die bin-Dateien aus BasCom sowie die hex-Datein aus Studio4 brennen. Ich habe an Pin 8 4,5V und GND an Pin 4. An Pin 2 ist der erste Pin des TO220 (Gate) angeschlossen. Zweiter Pin des TO220 ist ans Relais und dritter wiederum an GND angeschlossen. Ich glaube, so langsam lasse es mit den µC und werde mich mal umschauen, wo man so etwas in Auftrag geben kann. Falls jemand eine Gute Adresse kennt, werde dankbar.
Axel L. schrieb: > Da wohl mein MOSFET beschlossen hatte sich zu verabschieden habe ich den > IRF 3205 TO220 IR eingesetzt, aber es tut sich nach wie vor nichts. > Den Tiny kann ich ohne Probleme mit mySmartUSB auslesen und die > bin-Dateien aus BasCom sowie die hex-Datein aus Studio4 brennen. > Ich habe an Pin 8 4,5V und GND an Pin 4. An Pin 2 ist der erste Pin des > TO220 (Gate) angeschlossen. Warum testest Du nicht erstmal mit LEDs? Der FET als Relaistreiber ist doch beim Debuggen der Software eine zusätzliche Unsicherheit. Darum kannst Du Dich kümmern, wenn die Software zuverlässig läuft. > Zweiter Pin des TO220 ist ans Relais und > dritter wiederum an GND angeschlossen. Hast Du einen Widerstand (10k bis 20k) zwischen Gate und Source? Wenn nicht, kann der FET bei hochohmigem AVR-Pin (während des Programmierens) floaten. Hast Du eine Freilaufdiode parallel zur Relais-Spule? Wenn nicht, dann zerstört die Selbstinduktionsspannung der Relaisspule den FET bereits beim ersten Ausschalten. > Ich glaube, so langsam lasse es mit den µC und werde mich mal umschauen, > wo man so etwas in Auftrag geben kann. Falls jemand eine Gute Adresse > kennt, werde dankbar. MfG
Gast
#1726893
> Den Tiny kann ich ohne Probleme mit mySmartUSB auslesen und die > bin-Dateien aus BasCom sowie die hex-Datein aus Studio4 brennen. Mit der Option "Swap words" wird LSB und MSB im bin/hex vertauscht, wenn diese Einstellung nicht stimmt, dann sind die erzeugten Files für den µC völlig unbrauchbar. Diese unbrauchbaren Files lassen sich aber trotzdem flashen, egal mit welchem Programm. Entscheidend ist hier nur die Firmware des Programmers und in welcher Reihenfolge der die Bytes des Files in den µC schreibt. Manche Programmer benötigen gerade diesen Austausch, ob Dein myAVR ProgTool dazugehört, kann ich nicht sagen, das lässt sich aber von Dir leicht rausfinden, mach' 'nen Haken dort rein, wenn keiner drin ist. Ich habe für den STK500 ohne diese Option compiliert. Der IRF3205 kann lt. DB bis zu 4V Gate Threshold Voltage haben, das ist nicht optimal, der vorherige Typ war besser. Hast Du kein Messgerät, mit dem Du ein kurzzeitiges Ansteigen der Spannung am Pin2 messsen kannst ?
Kluchscheißender Consulter schrieb: > Hast Du einen Widerstand (10k bis 20k) zwischen Gate und Source? > Wenn nicht, kann der FET bei hochohmigem AVR-Pin (während des > Programmierens) floaten. Habe eine 10k Widerstand zwischen Gate (1. Kontakt am TO220) und Source (3. Kontakt am TO220). > > Hast Du eine Freilaufdiode parallel zur Relais-Spule? > Wenn nicht, dann zerstört die Selbstinduktionsspannung der Relaisspule > den FET bereits beim ersten Ausschalten. Gleich zwei Stück. Eine befindet sich im Reed-Relais (COMUS) und zweite habe ich parallel zur ersten Diode und der Spule (zwischen Pin2 & Pin6 des DIL14) angebracht. Der Witz: Ich habe mal den Tiny aus seinem Sockel genommen und jedesmal, wenn ich die Sockelkontakte 2(zur Gate) und 8(VCC) kurz schließe, schaltet das Relais. Dies Kurzschließen sollte doch eigentlich der µC machen, oder?
Ja schon. Häng aber trotzdem erst mal eine LED an. Mit der testet es sich viel angenehmer. Dein erstes Testprogramm könnte sein: Port Pin mit der LED auf Ausgang konfigurieren. LED einschalten. Dein nächstes Testprogramm Selbiges wie oben, nur diesmal LED ausschalten Damit kannst du unabhängig von irgendwelchen Rundherum Hardwareproblemen festellen, ob dein µC überhaupt arbeitet.
Karl heinz Buchegger schrieb: > Ja schon. > Häng aber trotzdem erst mal eine LED an. > Mit der testet es sich viel angenehmer. Habe ich gemacht. An Pin5 (PB0) eine LED und 1k Widerstand. > Dein erstes Testprogramm könnte sein: > Port Pin mit der LED auf Ausgang konfigurieren. LED einschalten. Habe diesen Code auf den µC gebrannt.
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
Null Reaktion. LED leuchtet, wenn ich Pin8 & Pin5 am Sockel kurzschließe.
Gast
#1727132
Mach' mal 'nen 10k von Pin 1 auf Pin 8 rein, möglicherweise kommt der µC nicht aus dem Reset.
Gast
#1727435
Auch wenn ich jetzt vielleicht in ein Fettnäpfchen treten sollte ... wäre es nicht, wie am Anfang von dem Thread schon mal genannt, einfach besser für diesen Zweck einen Tiny13 zu nehmen? Für's erste wären die Probleme beim Einsatz von BASCOM behoben und man könnte sich in Ruhe auf das Schaltungslayout stürzen.
Elektronix schrieb: > Auch wenn ich jetzt vielleicht in ein Fettnäpfchen treten sollte ... > wäre es nicht, wie am Anfang von dem Thread schon mal genannt, einfach > besser für diesen Zweck einen Tiny13 zu nehmen? > Für's erste wären die Probleme beim Einsatz von BASCOM behoben und man > könnte sich in Ruhe auf das Schaltungslayout stürzen. War heute bei Conrad und habe mir zwei Tiny13 besorgt. Folgendes Programm habe ich mit BasCom geschrieben und gebrannt.
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
Meine Schaltung Klappt, juhu!! Beim ersten Versuch bin ich von 9,6Mhz ausgegangen, aber Messungen ergaben für die 1,5sec ganze 12,3Sec. Dann habe ich den Wert auf 1,17Mhz reduziert und nun werden die Zeiten eingehalten. Läuft wunderbar. Ein großes Danke an alle Helfenden. ;-)
Gast
#1729114
Also ich hätte schon gerne wissen wollen, warum der Tiny15 nicht ging. Daß es prinzipiell geht, war sowieso klar, aber das Forum inklusive meiner einer hat sich an der Diskussion beteiligt, weil wir den Fehler finden wollten. Mit einem Tiny13 geht's natürlich auch, genauso eben wie's mit einem Tiny15 gegangen wäre, die Aufgabe ist für diese Bausteine völlig anspruchslos. Jetzt nicht zu wissen was der Fehler war, ist irgendwie unbefriedigend... Hast Du zum Schluss wenigstens den 10k Widerstand von VCC auf Reset dran gemacht ?
MWS schrieb: > Also ich hätte schon gerne wissen wollen, warum der Tiny15 nicht ging. > > Daß es prinzipiell geht, war sowieso klar, aber das Forum inklusive > meiner einer hat sich an der Diskussion beteiligt, weil wir den Fehler > finden wollten. > > Mit einem Tiny13 geht's natürlich auch, genauso eben wie's mit einem > Tiny15 gegangen wäre, die Aufgabe ist für diese Bausteine völlig > anspruchslos. > > Jetzt nicht zu wissen was der Fehler war, ist irgendwie > unbefriedigend... > > Hast Du zum Schluss wenigstens den 10k Widerstand von VCC auf Reset dran > gemacht ? Zwischen Gate und Source ist ein 10k Widerstand. Das war ein sehr sinnvoller Tipp. Ich habe mal meine Platine an diese Antwort gehängt. Ok, nicht gerade professionell, aber für mich reicht es völlig. Warum der ATtiny15L nicht ging, trotz fehlerfreiem Auslesen/Brennen, ist mir auch rätselhaft. Denn Tiny13 habe ich gebrannt, auf die Platine gesteckt und er lief. Der Tiny15 ging sofort in die Ablage M. Interessant finde ich auch, dass man zum Preis von einem Tiny15 zwei Tiny13 bekommt.
Gast
#1729341
> Zwischen Gate und Source ist ein 10k Widerstand. Das ist zwar auch sinnvoll, aber mein Vorschlag war beim Tiny15 zwischen VCC und RESET-Pin (PB5, Pin 1) einen 10k zu setzen, denn möglicherweise befand sich der Tiny15 laufend im Reset, das würde das Betriebsverhalten erklären, gleichwohl er sich programmieren ließ. Beim Programmieren zieht der Programmer den RESET Pin auf Low, der muss aber im laufenden Betrieb auf High liegen. > Interessant finde ich auch, dass man zum Preis von einem Tiny15 zwei > Tiny13 bekommt. Der Tiny15, wie auch der Tiny25 haben als Besonderheit eine High Speed PLL, die mit 25.6MHz, resp. 64MHz läuft, damit sind sehr schnelle PWMs möglich. Diese Eigenschaft hat der Tiny13 nicht, da Du die aber auch nicht brauchst, wäre der Tiny13 von Haus aus die bessere Wahl gewesen. Aber dennoch, der Tiny15 hätte ganz definnitiv laufen müssen.
Gast
#1845171
Der code funzt auf dem tiny15. Da ich blutiger Anfänger bin habe ich das in bascom reingesteckt, und das hex file über ponyprog über einen paralleladapter den ich hier gefunden habe: http://www.dieelektronikerseite.de/uC%20Ecke/Lections/SPI-Kabel%20-%202%20Welten%20treffen%20aufeinander.htm aufgespielt. Das einzige Problem ist: die Zeiten sind viel länger als 1.5 s. Ich habe dann mit anderen Werten experimentiert und mal gestoppt, 2000 ergibt eine Zeit von 4s und 4000ms ergibt ganze 14 s in der Realität. Allerdings muß ich dazusagen, daß ich die ersten Zeilen aus dem Basic code gelöscht habe, weil mir nicht klar war, warum ich die interne Taktfrequenz des tiny15 verändern soll. folgender code funzt definitiv auf dem tiny15 $regfile = "ATtiny15.DAT" $tiny $noramclear $hwstack = 0 $swstack = 0 $framesize = 0 'Relais an PB4 Config Portb.4 = Output Do 'Warte 1500 ms Waitms 4000 'Relais Ein (HIGH) Portb.4 = 1 'Warte 500 ms Waitms 2000 'Relais Aus (Low) Portb.4 = 0 Loop End
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.

