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.
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
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?
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
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.
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??
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
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.
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?
@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...
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,
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.
@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.
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
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.
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?
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!
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
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.