Forum: Mikrocontroller und Digitale Elektronik Hilfe bei umstieg von Attiny13 auf Attiny25


von Fabio (Gast)


Lesenswert?

Hallo, ich habe mit Bascom ein Programm für einen Eigenbauregler 
geschrieben und zwar für den Attiny13 - Läuft perfekt. Da ich nun noch 
zusätzliche Features intrigrieren möchte aber der Tiny13 dafür vom 
Speicher nicht mehr ausreicht hab ich mir den Attiny25 besorgt und das 
Programm auf diesen gespielt. Leider gibt es beim Betrieb mit dem Tiny25 
aussetzer d.h. er startet irgendwann einwach neu?!
Woran kann das liegen (bei gleicher Software außer natürlich die andere 
Reg-File) gibt es da noch was zu beachten? Fuses?
Hoffe Ihr könnt mir weiterhelfen.

von Sebastian (Gast)


Lesenswert?

Code?

Reset Beschaltung?

100nF?

von Fabio (Gast)


Lesenswert?

Reset Pin ist per fuses ausgeschaltet weil ich den als Ausgang nutze. 
100nf wohin? Spannungsversorgung hab ich drin und wie gesagt mit dem 13 
in der gleichen Schaltung geht es ja

von Achim M. (minifloat)


Lesenswert?

Die beiden Prozessoren sind teilweise nicht Bytecode-Kompatibel.
Wenn der Prozessortyp im makefile umgestellt wird, sollte ein make clean 
folgen, da der Linker/Locator/Nenn-es-wie-du-willst sonst alte .o files 
zu fressen bekommt. Make weiß und sieht das evtl. nicht, die Quelldatei 
ist ja älter als die Zieldatei, die deswegen nicht neu gebaut wird...

mfg mf

PS:
Ach, sorry, Bascom... hmmm... hab ich leider keine Ahnung.
Probier mal ein komplett neues Projekt anzulegen?

von oldmax (Gast)


Lesenswert?

Hi
Ich arbeite zwar n icht mit BASCOM, aber ich geh davon aus, das eine 
Hochsprache so die grundsätzlichen Dinge erledigt.... so er weiß, was 
für ein Controller gegeben ist. Also, sie nochmal im Programm nach, ob 
der Compiler auch alle Parameter richtig eingetragen sieht...
Prozessortyp, Takt etc. Danach fällt mir auch nur noch die Hardware ein. 
(Pinbeschaltung ?)
Gruß oldmax

von Sepp (Gast)


Lesenswert?

Programm nach dem Ändern der Reg- File auch wirklich neu kompilliert ?
(d.h. neue, HEX- Datei erstellt ?)

von Fabio (Gast)


Lesenswert?

Ja ich hab neu Kompiliert und Bascom hat auch die information über den 
neuen Controller. Die Tiny´s haben die gleiche Bauform und die 
Identischen Pins nur der 25er hat doppelt so viel flash wie der 13er. 
Der Code ist leider zimlich lang und unübersichtlich. Es wird zu begin 
des Programms die Signale der Fernbedienung eingelernt (wo vollgas, 
nullgas usw sind.) dann wird das auf eine PWM umgerechnet. Dies 
geschieht nur einmal beim Starten des Controllers danach geht es in eine 
endlosschleife die beim Tiny13 funktioniet aber nicht beim Tiny25, der 
wie oben beschrieben mitten im betrieb (Endlosschleife) neu startet.

von Fabio (Gast)


Angehängte Dateien:

Lesenswert?

Habs eingrenzen können, wenn ich folgendes Codesegment weglasse hab ich 
keine Ausfälle mehr. Aber verstehen tu ich das nicht was ist falsch an 
dem Code und warum führt er quasi zu einem Reset??

von oldmax (Gast)


Lesenswert?

Hi
Wenn man das Datenblatt vergleicht, dann kann der Pin PortB.4 vom
ATTiny 25 noch ein paar weitere Dinge. Vielleicht fehlt in der 
Portinitialisierung etwas und er reagiert auf den Statuswechsel etwas 
eklig.
Gruß oldmax

von Frank L. (hermastersvoice)


Lesenswert?

Watchdog aktiv?

von Vlad T. (vlad_tepesch)


Lesenswert?

Bitte auch beachten, dass der tiny25 mit anderer frequenz rennt.
tiny13 mit 9,6MHz oder mit Div8 1,2Mhz
und der der tiny25 mit 8MHz oder 1MHz

von MWS (Gast)


Lesenswert?

Es gab's mal bei Bascom Probleme mit Tiny25 bei den Timern, also mal 'n 
Update machen.

Sporadisches Aussteigen könnte auch auf Programmmurks hinweisen, der 
sich eben auf einem anderen Controller bemerkbar macht.

Ein eingeschalteter Brownout wär' bei widriger Umgebung auch 'ne 
Ursache.

Auch der Cpu-Clock unterscheidet sich, 9.6Mhz Tiny13 zu 8MHz Tiny25.

Und von 'nem als Text geposteten Codeschnipselchen ernsthaft eine 
Hinweis auf den Fehler im Quellcode zu erwarten, ist eher als Witz 
einzuordnen.

von Fabio (Gast)


Lesenswert?

Den 13er lass ich mit 1,2Mhz und den 25er mit 1Mhz laufen, dass sollte 
so gehen. Am PB.4 hab ich nur eine Led angeschlossen die bei Vollgas an 
geht und das läuft ja problemlos. Watchdog Timer haben sie beide auch 
wenn ich dessen funktion nicht ganz genau verstehe...
Es liegt wie gesagt an dem oben geposteten Code, also den Aufruf des ADC 
an PB2 da hängt er sich irgendwie auf und started neu und ich hab keine 
Ahnung warum?!? Dabei fällt mir in der Schaltung auf das ich an dem 
Spannungsteiler am Eingan von PB2 keinen Kondensator dran habe, könnte 
das der Grund sein oder kann das Aufrufen des ADC noch etwas anderes 
auslösen?

von Vlad T. (vlad_tepesch)


Lesenswert?

das beste wäre, du zeigst den ganzen code

von Vlad T. (vlad_tepesch)


Lesenswert?

nebenbei:
warum egeintlich nicht
1
Check_lipo:
2
  'Bei erreichen der Abschaltspannung geht nur noch maximal Halbgas!
3
  Vm = Getadc(1) 
4
  If R > 128 And Vm < (S * 153) Then
5
    R = 128
6
    Portb.4 = 0   'Vollgas LED aus
7
  End If
8
Return

Und statt Magic Numbers kann man bestimmt auch in Bascom Konstanten 
definieren

von Fabio (Gast)


Lesenswert?

@Vald: Das geht nicht in der If-Anweisung noch eine Berechnung 
durchführen.

von Fabio (Gast)


Lesenswert?

@MWS: Ich glaube nicht das das Problem vom Timer her kommt. Den 
kompletten Code will ich eigentlich nicht posten.
Wie gesagt in der Endlosschleife für den Betrieb geht auch alles wenn 
ich den oben geposteten Code nicht aus der Schleife aufrufe.
Welchen zusammenhang gibt es denn noch wenn ich den 
Analog-Digitalwandler aufrufe, besteht hier irgend ein zusammenhang mit 
einem Reset?

Ach und Brownout ist per Fuses nicht eingeschaltet, aber auch hier muß 
ich geschtehen das ich diese Funktion auch nicht ganz verstehe...

von Dr G. Reed (Gast)


Lesenswert?

Hier war mal in einem anderen Zusammenhang das Problem, dass ein 
Controller immer dann sporadische Probleme machte, wenn der ADC mit 
einer zu hohen Frequenz angesteuert wurde (ADC Clock Prescaler)

Setz den Takt dochmal runter, wenn er recht hoch eingestellt ist,

von MWS (Gast)


Lesenswert?

Fabio schrieb:
> Welchen zusammenhang gibt es denn noch wenn ich den
> Analog-Digitalwandler aufrufe

Wenn der ADC nicht gestartet wäre, dann könnte er im GetADC() hängen 
bleiben, würde aber nicht resetten.

Für 'ne weitere Suche würde man im verdächtigen Codeteil z.B. das 
GetADC() auskommentieren und durch einen Festwert ersetzen, usw.

Oder R = 128 fest setzen, denn die Probleme können ohne weiteres im 
anderen Code liegen, der diese Werte weiterverarbeitet und dann eben 
aussteigt.

> Den kompletten Code will ich eigentlich nicht posten.

Dann musst Du selbst weitersuchen.

von MWS (Gast)


Lesenswert?

Der Tiny25 kennt übrigens einen "ATtiny15 Compatibility Mode", den Du 
günstigerweise nicht per Fuse gesetzt hast.

von Fabio (Gast)


Lesenswert?

@Dr G. Reed: der Prescaler steht auf Auto, ich kann aber auch einen Wert 
für festlegen. Was wäre denn ein sinnvoller Wert für den Prescaler bei 
1Mhz?

@MWS: Danke für den Tip werde mal in dem Codeteil Festwerte eingeben und 
nochmal teste vielleicht kann ich es weiter eingrenzen, ich bin mir aber 
fast sicher das das Problem nicht von meinem Code kommt sondern durch 
den Aufruf des ADC. Werde hierzu wie von Dr G. Reed vorgeschlagen den 
Wert des Prescalers ändern und weiter testen.

von Dr G. Reed (Gast)


Lesenswert?

Das Datenblatt sagt hier:

By default, the successive approximation circuitry requires an input 
clock frequency between
50 kHz and 200 kHz to get maximum resolution. If a lower resolution than 
10 bits is needed, the
input clock frequency to the ADC can be higher than 200 kHz to get a 
higher sample rate. It is
not recommended to use a higher input clock frequency than 1 MHz.


ADC Takt sollte also nicht höher als 1MHz sein

von Michael D. (Gast)


Lesenswert?

Du sagst das du mit dem Watchdog arbeitest, bowohl du die Funktion nicht 
richtig verstehst ... sind die beide auf die gleiche Dauer eingestellt?

Wenn ja, dann stell die mal etwas höher.

von Fabio (Gast)


Lesenswert?

Nein ich arbeite nicht mit dem Watchdog eben weil ich es nicht verstehe. 
Ich bin noch nicht lange am Programiere und hab mir mein wissen durch 
lesen im Netzt und der Bascom-Hilfe angeeignet. Ich werde den Prescaler 
jetzt auf 16 stellen dann wäre ich bei einem Takt von 1Mhz bei 62,5kHz 
stimmt doch oder?

von Fabio (Gast)


Lesenswert?

Gute Nachrichten!!! Es lag wirklich am Prescaler des ADC jetzt steht er 
auf 16 und alles ist wunderbar! Komisch das die Auto-Funktion bei Bascom 
das nicht hinbekommen hat aber daran hätte ich nie gedacht.

Also vielen Dank an allen von euch , ist ein klasse Forum hier!

von Vlad T. (vlad_tepesch)


Lesenswert?

Fabio schrieb:
> @Vald: Das geht nicht in der If-Anweisung noch eine Berechnung
> durchführen.

Ok, bascom ist nicht so meins.
Ist aber dann auch eine komische Grammatik. boolsche algebra darf man, 
aber integrale nicht?
Dann ebend:
1
Check_lipo:
2
  'Bei erreichen der Abschaltspannung geht nur noch maximal Halbgas!
3
  Vm = Getadc(1) 
4
  Vthres = S * 153
5
  If R > 128 And Vm < Vthres Then
6
    R = 128
7
    Portb.4 = 0   'Vollgas LED aus
8
  End If
9
Return

oder halt ähnlich, falls wieder was nicht passt.
Mir gings auch eher ums Prinzip

von Fabio (Gast)


Lesenswert?

Ja das müste gehen.  Ich bin noch dabei den Code zu überarbeiten. Ich 
habs so geschrieben da es für mich verständlicher ist fals ich in ein 
paar Monaten nochmal drüber schauen muß. Also wegen der 
nachvollziehbarkeit.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.