Forum: Mikrocontroller und Digitale Elektronik Marderschreck Softwareproblem


von Adrian (Gast)


Angehängte Dateien:

Lesenswert?

Hallo:)
ich habe mir einen Marderschreck zusammengebaut und mit dem oben 
eingefügtem Programm wollte ich dies auf einem ATtiny25 überrtragen. Das 
Programm wurde für einen Attiny15 ausgstellt. Natürlich habe ich die 
Pinnbelegung vergliechen und fand heraus dass diese auch die selbe 
Pinbelegung haben. Leider bekomme ich nicht am Ausgang im wechselnden 
Takt 20-40khz raus sondern bewege mich immer nur um die 500Hz konstant. 
Ich weiss jetzt gerade nicht wo ich am besten mit der Suche anfangen 
soll. Wurschtel mich jetzt schon die ganze zeit am Porgramm durch ob ich 
vll etwas übersehen habe oder ob der Timer vll falsch eingestllt wurde. 
Im Anhang habe ich auch noch mein Schaltplan dabei gefügt damit mans 
besser nachvollziehen kann.
Hoffe Ihr könnt mir helfen^^

Vielen Dank im voraus^^

von Rene H. (Gast)


Lesenswert?

Taktfrequenz?

Der ATTiny15 hat 1.6Mhz intern und der ATTiny25 per Default 8.0Mhz
(so steht das zumindest in den Datenblätter).

Grüsse,
R.

von Uwe (Gast)


Lesenswert?


von spess53 (Gast)


Lesenswert?

Hi

>Der ATTiny15 hat 1.6Mhz intern und der ATTiny25 per Default 8.0Mhz
>(so steht das zumindest in den Datenblätter).

Der ATTiny25 wird mit internem 8MHz RC-Oszillator und gesetzter 
CKDIV8-Fuse ausgeliefert.

MfG Spess

von Adrian (Gast)


Lesenswert?

wie kann ich nun die Taktfrequenz auf 1 Mhz herabsetzen sodass das 
programm dann läut?

Im Porgramm fand ich nicht mit welcher Taktfrequenzrate das jetzt 
durchlaufen wurde.

von Susi Sorglos (Gast)


Lesenswert?

Aufwand > Nutzen. Der Marder kommt wieder. Dein Tinnitus bleibt.
Marder mit Pieper zu verteiben hilft nicht ewig.

von Uwe (Gast)


Lesenswert?

UND NOCHMAL :
In dem Datenblatt vom 25er Seite 24 unter 6.1.6 :
http://www.atmel.com/images/atmel-2586-avr-8-bit-m...

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Adrian schrieb:
> wie kann ich nun die Taktfrequenz auf 1 Mhz herabsetzen sodass das
> programm dann läut?

Hast Du die Antwort von spess53 gelesen? Gesetzte CKDIV8-Fuse heisst, 
dass der Takt intern nochmals durch 8 geteilt wird. Damit läuft Dein 
ATtiny25 bereits mit 1 MHz - so wie das bei vielen ATmegas/ATtinys 
werksmäßig eingestellt ist.

Wenn statt 20-40khz nun 500Hz rauskommen, bist Du eher Faktor 40 zu 
langsam statt zu schnell. Da stimmt irgendwas grundsätzliches nicht.

> Im Porgramm fand ich nicht mit welcher Taktfrequenzrate das jetzt
> durchlaufen wurde.

Immerhin steht da was im Kommentar:

"The timing is adapted for 1.6 MHz"

von Uwe (Gast)


Lesenswert?

Und warum aktivierst du nicht den Kompatibilitätsmodus ?

von der alte Hanns (Gast)


Lesenswert?

Funktioniert dies? :

> .DEVICE ATtiny25  ;for gavrasm

von Adrian (Gast)


Lesenswert?

ah sry jaaa jetzt hab ichs gefunden zum einstellen :) Vielen dank 
schonmal jedoch kommen nur am ausgang 16khz raus :(

von Adrian (Gast)


Lesenswert?

Adrian schrieb:
> ah sry jaaa jetzt hab ichs gefunden zum einstellen :) Vielen dank
> schonmal jedoch kommen nur am ausgang 16khz raus :(

Und es wechselt sich nicht wenn PB3 high oder mal low ist

von Adrian (Gast)


Lesenswert?

der alte Hanns schrieb:
> Funktioniert dies? :
>
>> .DEVICE ATtiny25  ;for gavrasm

jedenfalls macht er hier keine fehlermeldung als wenn ich das mit 
.Device ATtiny15 machen würde

von Dieter F. (Gast)


Lesenswert?

Ich kopiere den Hinweis von Uwe mal rein - der Link funktioniert (bei 
mir zumindest) nicht:

6.1.6 Internal PLL in ATtiny15 Compatibility Mode Since ATtiny25/45/85 
is a migration device for ATtiny15 users there is an ATtiny15 
compatibility mode for back-ward compatibility.

The ATtiny15 compatibility mode is selected by programming the CKSEL 
fuses to ‘0011’.

In the ATtiny15 compatibility mode the frequency of the internal RC 
oscillator is calibrated down to 6.4 MHz and the multiplication factor 
of t
he PLL is set to 4x. See Figure 6-3. With these adjustments the clocking 
system is ATtiny15-compatible and the resulting fast peripheral clock 
has a frequency of 25.6 MHz (same as in ATtiny15).

-> Also wäre ein Setzten der Fuses sicherlich sinnvoll ...

von MarcusW (Gast)


Lesenswert?

Susi Sorglos schrieb:
> Aufwand > Nutzen. Der Marder kommt wieder. Dein Tinnitus bleibt.
> Marder mit Pieper zu verteiben hilft nicht ewig.

Kann ich nicht bestätigen. Wir hatten jahrelang erhebliche Probleme. 
Eine Radarscheuche vom Conrad nach dem gleichen Prinzip wie hier hat das 
Problem gelöst. Seitdem haben wir seit ca. 2 Jahren keinen Marder mehr. 
Wichtig ist, dass die Frequenz nicht dauerhaft ausgesandt wird, sonst 
gewöhnen sich die Tiere daran. Ich hab meinen per Zeitschaltuhr Abends 
und Morgens je 15 Minuten an.

von Klaus I. (klauspi)


Lesenswert?

MarcusW schrieb:
> Susi Sorglos schrieb:
>> Aufwand > Nutzen. Der Marder kommt wieder. Dein Tinnitus bleibt.
>> Marder mit Pieper zu verteiben hilft nicht ewig.
>
> Kann ich nicht bestätigen. Wir hatten jahrelang erhebliche Probleme.
> Eine Radarscheuche vom Conrad nach dem gleichen Prinzip wie hier hat das
> Problem gelöst. Seitdem haben wir seit ca. 2 Jahren keinen Marder mehr.
> Wichtig ist, dass die Frequenz nicht dauerhaft ausgesandt wird, sonst
> gewöhnen sich die Tiere daran. Ich hab meinen per Zeitschaltuhr Abends
> und Morgens je 15 Minuten an.

und genügend Dampf dahinter...

Bei meinem (vom pösen ADAC empfohlen und verkauft) habe ich immer ein 
komisches Gefühl auf den Ohren wenn ich die Motorhaube aufmache und der 
Marderschreck gerade aktiv ist. Hören tue ich aber nichts.

von Magic S. (magic_smoke)


Lesenswert?

Ja der Nachbar eines Freundes hat auch so ein ätzendes 
Marderverscheuchversuchsdingsbums im Auto drin. Das kränkliche Piepsen 
davon kann man abends locker 20 Meter weit hören. Zum Glück ists nicht 
mein Nachbar, sonst hätt ich den Haufen wahrscheinlich schon angezündet. 
Dann kommt auch kein Marder mehr.

von Engelmacher (Gast)


Lesenswert?

Marder lassen weder mit gewöhnlichen noch mit ungewöhnlichen Tönen 
vertreiben. Ist schon seit Jahrzehnten bekannt, aber solange es Leute 
gibt die dafür Geld ausgeben, wird sich an diesem Irrglauben nichts 
änderen.

von Der E. (rogie)


Lesenswert?

Das einzige, was hilft, sind die Marderschutzgeräte, die mit 
Hochspannung arbeiten. Mein Auto hatte vor Jahren regelmäßig Besuch von 
einen Marder, jedesmal war irgendein Schlauch kaputtgebissen. Irgendwann 
nervte es, dass das Auto fast jeden Morgen erstmal zur Werkstatt musste, 
um die kaputten Schläuche zu tauschen, trotz Kostenübernahme durch 
Versicherung.

Ich habe dann an verschiedenen Stellen im Motorraum die Plättchen, die 
die Hochspannung führte, befestigt, bevorzugt da, wo der Marder immer 
"zugeschlagen" hatte und wo er in den Motorraum einstieg. Danach war 
endlich Ruhe.

Und nein, der Marder lag nicht tot im Motorraum :-D

von Magic S. (magic_smoke)


Lesenswert?

> Und nein, der Marder lag nicht tot im Motorraum :-D
Sieht auch nicht toll aus. Kann man am besten mit Kühlaggregaten 
vergleichen, wo eine dumme Ratte ausgerechnet im Ventilator nach Futter 
suchen mußte, als der Kühlstellenregler meinte ihm wirds zu warm.

von Adrian (Gast)


Lesenswert?

Hallo, ich hab wie es mir beschrieben wurde die Fuses  auf
4MHZ eingestellt  und es ist auch mit dem ATiny15 kompatibel. Jedoch 
bekomme ich nun 16kHz konstant am Ausgang und wenn ich PB3 High oder Low 
setze ändert sich auch nicht wirklich viel dran.

von F. F. (foldi)


Lesenswert?

Schon mal das Wort "Ablenkungsfütterung" gehört?

von Uwe (Gast)


Lesenswert?

> Hallo, ich hab wie es mir beschrieben wurde die Fuses  auf 4MHZ eingestellt
Du sollst die Fuses aber nicht auf 4MHz stellen sondern auf 6,4MHz und 
den PLL auf 4x damit der Timer mit 25,6Mhz läuft!

The ATtiny15 compatibility mode is selected by programming the CKSEL
fuses to ‘0011’.

In the ATtiny15 compatibility mode the frequency of the internal RC
oscillator is calibrated down to 6.4 MHz and the multiplication factor
of t
he PLL is set to 4x. See Figure 6-3. With these adjustments the clocking
system is ATtiny15-compatible and the resulting fast peripheral clock
has a frequency of 25.6 MHz (same as in ATtiny15).

von F. F. (foldi)


Lesenswert?

Hol dir einen Jäger dazu. Der macht das schon.
Allerdings musst du nun wieder bis zum 16.10 warten.

: Bearbeitet durch User
von Magic S. (magic_smoke)


Lesenswert?

> Schon mal das Wort "Ablenkungsfütterung" gehört?
Mit Blei? ;)

von Peter D. (peda)


Lesenswert?

Im ATtiny15 Mode werden auch noch 2 Pins vertauscht.

von Dieter F. (Gast)


Lesenswert?

Kannst Du bitte erklären, warum Du diese Zeile (265)

    out  TCCR1,temp    ; 1,6 Mhz

geändert hast?

Im Original stand TCCR0 - oder?

Im übrigen bitte Uwe's Hinweis berücksichtigen ...

von Adrian (Gast)


Lesenswert?

Dieter Frohnapfel schrieb:
> Kannst Du bitte erklären, warum Du diese Zeile (265)
>
>     out  TCCR1,temp    ; 1,6 Mhz
>
> geändert hast?
>
> Im Original stand TCCR0 - oder?
>
> Im übrigen bitte Uwe's Hinweis berücksichtigen ...

Dies habe ich geändert weil er dies als Fehler gemeldet hat. TCCR0 
erkennt er nicht sagt mir dass es undefined ist.

Uwe schrieb:
>> Hallo, ich hab wie es mir beschrieben wurde die Fuses  auf 4MHZ
> eingestellt
> Du sollst die Fuses aber nicht auf 4MHz stellen sondern auf 6,4MHz und
> den PLL auf 4x damit der Timer mit 25,6Mhz läuft!
>
> The ATtiny15 compatibility mode is selected by programming the CKSEL
> fuses to ‘0011’.
>
> In the ATtiny15 compatibility mode the frequency of the internal RC
> oscillator is calibrated down to 6.4 MHz and the multiplication factor
> of t
> he PLL is set to 4x. See Figure 6-3. With these adjustments the clocking
> system is ATtiny15-compatible and the resulting fast peripheral clock
> has a frequency of 25.6 MHz (same as in ATtiny15).

ja habe es auf 6.4 Mhz eingestellt habs nur falsch abgelesen in den 
Fuses Stand 4MhZ aber die erläuterung dazu stand dass es mit 6,4MHz beim 
Attiny 15 läuft soweit geschafft

von Dieter F. (Gast)


Lesenswert?

Adrian schrieb:
> Dies habe ich geändert weil er dies als Fehler gemeldet hat. TCCR0
> erkennt er nicht sagt mir dass es undefined ist.

Das ist allerdings ein guter Grund :-)

Nur ist es nicht sonderlich ratsam, einfach 0 durch 1 zu ersetzen - nur 
weil der Compiler das dann annimmt.
Es ist zwar lästig (und ich hasse die immerwährenden Hinweise auf 
Datenblätter auch) aber in diesem Fall wäre ein Blick in das Datenblatt 
doch sinnvoll gewesen.

TCCR0B statt TCCR1 würde ich mal probieren ...

von oszi40 (Gast)


Lesenswert?

Klaus I. schrieb:
> Bei meinem (vom pösen ADAC empfohlen und verkauft) habe i

Ob sich Deine Kinder, die teilweis bis 23 kHz hören so richtig darüber 
freuen?? Über 85 dB sollte man Gehörschutz tragen.
http://de.wikipedia.org/wiki/Schalltrauma

Auch der ADAC hat in der Zwischenzeit erkannt, daß ein paar Töne nicht 
überall gegen Marder helfen, Elektroschocks mit Hochspannung aber schon.

von Adrian (Gast)


Angehängte Dateien:

Lesenswert?

Dieter Frohnapfel schrieb:
> Adrian schrieb:
>> Dies habe ich geändert weil er dies als Fehler gemeldet hat. TCCR0
>> erkennt er nicht sagt mir dass es undefined ist.
>
> Das ist allerdings ein guter Grund :-)
>
> Nur ist es nicht sonderlich ratsam, einfach 0 durch 1 zu ersetzen - nur
> weil der Compiler das dann annimmt.
> Es ist zwar lästig (und ich hasse die immerwährenden Hinweise auf
> Datenblätter auch) aber in diesem Fall wäre ein Blick in das Datenblatt
> doch sinnvoll gewesen.
>
> TCCR0B statt TCCR1 würde ich mal probieren ...

okay jaaa werde ich jetzt mal schauen danke für den Tipp.
Was mache ich eig bei Warnungen? Bekomme immer jedes mal 3 Warnungen. 
Sind alle im Anhang zufinden. Liegt es an dem Compiler selber weil der 
etwas aktueller ist als der Quelcode selber?

von Dieter F. (Gast)


Lesenswert?

Ich kann Assembler zwar lesen und verstehen (meist :-)) aber ich 
programmiere nicht bzw. nur selten (inline oder wenns nicht anders geht) 
damit.

Vermutlich (~ ich schaue in die Glaskugel) hast Du irgendwelche Libs 
mehrfach eingebunden.

von spess53 (Gast)


Lesenswert?

Hi

>Liegt es an dem Compiler selber weil der
>etwas aktueller ist als der Quelcode selber?

Unwahrscheinlich. Was steht denn in Zeile 38, 92 und 93?

MfG Spess

von Dieter F. (Gast)


Lesenswert?

spess53 schrieb:
> Unwahrscheinlich. Was steht denn in Zeile 38, 92 und 93?

Trommelwirbel .... Tusch - und?

Mach es nicht so spannend ... :-)

Ich vermute mal, dass die "DEVICE..Definition" bereits im Projekt und 
damit doppelt angegeben ist. In 92 und 93 werden die Register-Alias r28 
und r29 zwar verwendet - aber nicht definiert (wie auch andere Register 
in den Zeilen davor).
Grundsätzlich kann ich einem Kind (Register) doch mehrere Namen geben - 
oder?

von Peter D. (peda)


Lesenswert?

Wenn Du die Fuses auf ATTiny15 setzt, mußt Du natürlich auch für 
ATtiny15 assemblieren.
Die Fuse macht ihn binärkompatibel.

von Adrian (Gast)


Lesenswert?

Ich hab mir das Datenblatt zu PLL durchgelesen aber ich weiss nicht wie 
ich das hier in assembly konfigurieren muss dass er auf 25 MHz läuft. Wo 
schreibe ich den 4x rein damit der Timer auf 25 MHz läuft?. Zunächst 
muss ich doch erst

1) PLL aktivieren
2) Warten bis PLL eingerastet
3) und dann PCKE setzen?

von Dieter F. (Gast)


Lesenswert?

Peter Dannegger schrieb:
> Wenn Du die Fuses auf ATTiny15 setzt, mußt Du natürlich auch für
> ATtiny15 assemblieren.

Ob man das MUSS weiss ich nicht - darüber muss ich erst nochmal 
nachdenken.

Der Hinweis

"The Output Compare Register B - OCR1B from ATtiny15 is replaced with 
the output compare register C - OCR1C that is an 8-bit read/write 
register. This register has the same function as the Output Compare 
Register B in ATtiny15."

aus dem Datenblatt würde ja dann eigentlich keinen Sinn machen - oder?

von Dieter F. (Gast)


Lesenswert?

Bin noch am "Nachdenken" ...

Wenn ich im Atmel-Studio (6.1) ein Projekt für den ATtiny15 einrichte 
... uups, geht gar nicht - dort kann ich keinen ATtiny15 auswählen!

Also, wenn ich im Atmel-Studio ein Projekt für den ATtiny25 einrichte 
und den Code für den ATtiny15 einstelle (incl. .DEVICE ATtiny15  ;for 
gavrasm), dann meldet mir der Compiler den weiter oben genannten Fehler; 
er kennt TCCR0 nicht. Ist ja auch logisch, da mit der Auswahl des 
Prozessors die korrekte Alias-Bibliothek (für den gewählten Prozessor) 
eingebunden wird.

Aktuell würde ich also immer noch dahin tendieren, die Fuses umzustellen 
(UND NUR DIE FUSES - keine PLL etc. selbst wählen wollen etc.) und TCCR0 
durch TCCR0B sowie OCR1B durch OCR1C zu ersetzen.
Da der Kompatibilitätsmodus die Pins PB3 und PB4 (per Hardware ?)tauscht 
(die ja beim ATtiny25 zum ATtiny15 vertauscht sind) ist weiter nichts zu 
tun.

Weiterdenken :-)

von Adrian (Gast)


Lesenswert?

ehm ich bin etwas verwirrt was ich sagen soll jetzt :) Erst mal ein 
rieses Dankeschön! Jetzt klappt es zwar habe ich noch die beiden 
Warnungen mit den schon definierten Variablen aber es funktioniert jetzt 
so wie ich es haben möchte

von Dieter F. (Gast)


Lesenswert?

Die "Variablen"-Warnungen bekommst Du nur weg, wenn Du die beiden Zeilen

.def  hour    = r26
.def  itemp    = r27

rausnimmst und überall "hour" durch "XL" und "itemp" durch "XH" ersetzt.
Das halte ich aber nicht für erforderlich (bin aber kein 
Assembler-Experte).

Die andere Warnung verschwindet, wenn Du die Zeile

.DEVICE ATtiny25  ;for gavrasm

entfernst. Diese Zeile ist aus meiner Sicht nicht erforderlich.

von Adrian (Gast)


Angehängte Dateien:

Lesenswert?

Danke schön jetzt läuft mein programm einwandfrei :)
Aber ich hab ein kleines problem und zwar möchte ich eig dass wenn der 
eingang hier pb3 low ist soll am ausgang keine frequenz rauskommen bzw 
kein sound erst wenn pb3 high ist. Ich ein bisschen den code versuch zu 
verändern also was ich nur geändert habe ist nur in der zeile:

lightloop habe ich im unterprogramm ligthday noch ein clc und ein brlo 
soundout hinzugefügt und bei sndpinhi habe ich was bissher auf flag,2 
stand in flag 1 umgeändert.

In der lightloop schleife habe ich bei sbrc Flag,1 zu sbrc Flag,0 
umgeändert.

Auch wenn pb3 low ist läuft der time i-wie weiter aber er sollte ja eig 
stoppen wie es im programm beschrieben ist.

Zur übersicht kopiere ich nochmal den ganzen Quellcode rein um 
missverständnisse zuvermeiden.

von Uwe (Gast)


Lesenswert?

Hi,
>und überall "hour" durch "XL" und "itemp" durch "XH" ersetzt
geht auch anders:

#define hour    XL
#define itemp   XH

schönen Tag noch, Uwe

von Dieter F. (Gast)


Lesenswert?

Da Du ja

http://www.elektronik-labor.de/AVR/dds/Nightlight.html

kopiert hast sollte auch (mit dem angepassten Original-Code) und 
hoffentlich der Original-Schaltung über S1 (S1 can switch the sound off 
or to automatic on at night) der Ton aus- bzw. auf Nachtautomatik 
geschaltet werden können.

Was willst Du also noch ändern?

Hast Du die Schaltung korrekt ausfgeführt oder hast Du Änderungen 
durchgeführt? Wenn ja, welche?

@Uwe: Wusste ich nicht und finde ich lustig - wäre ja dann im Endeffekt 
genau wie die aktuelle Lösung. Werde ich mal ausprobieren, ob der 
Compiler da nicht meckert ...

von Adrian (Gast)


Angehängte Dateien:

Lesenswert?

Ich hab nicht die orginale schaltung genommen sondern habt die 
einbisschen anders gemacht(einfacher für mich). Ich habe kein LDR 
angeschlossen sondern nur Mass,VCC, PB1 und Pb3 sind verbunden. Im 
Anhang habe ich mein Schaltplan hinzugefügt.

Uwe schrieb:
> Hi,
>>und überall "hour" durch "XL" und "itemp" durch "XH" ersetzt
> geht auch anders:
>
> #define hour    XL
> #define itemp   XH
>
> schönen Tag noch, Uwe

Ah stimmt danke :) hab ich ganz vergessen ging auch einfacher :)

von Schimanski (Gast)


Lesenswert?

ich Idiot klicke auf das DREI MB grosse Bild.

von Schimanski (Gast)


Lesenswert?

Mein Gott Walter!

von Schimanski (Gast)


Lesenswert?

Was hast Du als IC1 am Start? den TDA 2030? Um den würd ich mich als 
nächstes kümmern. Da fehlt die komplette Aussenbeschaltung... ( 
Abblock-Kondensatoren, Boucherot-glied ) usw.

von Adrian (Gast)


Lesenswert?

Schimanski schrieb:
> Was hast Du als IC1 am Start? den TDA 2030? Um den würd ich mich
> als
> nächstes kümmern. Da fehlt die komplette Aussenbeschaltung... (
> Abblock-Kondensatoren, Boucherot-glied ) usw.

Ich brauch die Glättung für meine Schaltunt nicht unbedingt :) aber das 
hat doch eig nichts mit dem  Attiny25 zutun:)

von Schimanski (Gast)


Lesenswert?

Adrian,
ich hab dir ne Mail geschrieben  ^.^

von Schimanski (Gast)


Lesenswert?

Adrian schrieb:
> Schimanski schrieb:
>> Was hast Du als IC1 am Start? den TDA 2030? Um den würd ich mich
>> als
>> nächstes kümmern. Da fehlt die komplette Aussenbeschaltung... (
>> Abblock-Kondensatoren, Boucherot-glied ) usw.
>
> Ich brauch die Glättung für meine Schaltunt nicht unbedingt :) aber das
> hat doch eig nichts mit dem  Attiny25 zutun:)

brauchst Du sehr wohl. Sonst schwingt der TDA2030 von ganz alleine.
Wie schalten die dennn den in der Originalschaltung ein und aus? klauen 
die dem die MAsse? Übelste Manier :)

von Dieter F. (Gast)


Lesenswert?

Schimanski schrieb:
> Adrian,
> ich hab dir ne Mail geschrieben  ^.^

Schade, das hätte mich jetzt auch interessiert.

@Adrian:
Unschön ist, dass Du im ersten Post die Original-Schaltung angibst aber 
eine deutlich andere Schaltung verwendest. Da könnte man sich leicht 
veralbert vorkommen ...

Ob Deine Schaltung so korrekt ist kann ich nicht beurteilen. Ich würde 
aber schon mit Pulldown-Widerstand und Abblock-Kondensator arbeiten.

Wenn Du die Schaltung anpasst musst Du natürlich auch das Programm 
anpassen. Wo genau, das orientiert sich an Deinen Änderungen in der 
Schaltung. Da musst Du schon selbst aktiv werden - oder es findet sich 
ein hilfsbereiter Assembler-Spezialist, der das für Dich übernimmt.

von Uwe (Gast)


Lesenswert?

> Ich brauch die Glättung für meine Schaltunt nicht unbedingt
Hast du mal so beschlosssen und weil du ja der Elektronik Gott bist 
schnell mal die Physik in unserem Universum geändert!?

von Uwe (Gast)


Lesenswert?

> Ob Deine Schaltung so korrekt ist kann ich nicht beurteilen.
Eine Schaltung in der ICs vorkommen ist ohne Abblockkondensatoren ist 
niemals korrekt.

von Adrian (Gast)


Lesenswert?

Wenn ich das jetzt ganz richtig verstanden habe muss am Pluseingang vom 
IC Abblockkondensatoren zusätzlich beschaltet werden und am Minusausgang 
ein Pullup-Widerstand auf Ground gelegt werden?

von Adrian (Gast)


Lesenswert?

achja und wie groß darf er maximal sein? (pulldown-widerstand)?

von Schimanski (Gast)


Lesenswert?

Assembler ist immer schwierig, sich da schnell wieder reinzufinden. 
Viele hier haben mit asm angefangen. Bei den meisten liegt das aber eben 
Jahre zurück.
Aber einfach mal so was übernehmen und dann mal eben so einen anderen 
Tiny nehmen, OHNE das Datenblatt studiert zu haben?
Wenn man hingegen das Datenblatt Studiert, kann man auch die Software 
gleich selbst schreiben. Es zwingt einen ja niemand, das in asm zu 
machen. Gut - macht man es in BASCOM, hat man hier auch gleich wieder 
versch... ^.^
der einzige Assembler-Spezi, der mir auf die schnelle einfiele, wäre 
Brumbär- Hannes Lux.

Schimanski

ich sehe es mir gern mal an. Aber erst heute abend.

von Adrian (Gast)


Lesenswert?

Alles klar. Ehm ich habe beide Datenblätter mir angeschaut und von der 
Hardware stimmt alles. Aber ich schaue zur Sicherheit nochmal rein

von spess53 (Gast)


Lesenswert?

Hi

>Was hast Du als IC1 am Start? den TDA 2030? Um den würd ich mich als
>nächstes kümmern. Da fehlt die komplette Aussenbeschaltung... (
>Abblock-Kondensatoren, Boucherot-glied ) usw.

Vor allem fehlt ihm die Spannung. Der läuft erst ab 12 oder +-6V.

MfG Spess

von Karl H. (kbuchegg)


Lesenswert?

Schimanski schrieb:

> Wenn man hingegen das Datenblatt Studiert, kann man auch die Software
> gleich selbst schreiben.

Jup.
Zumal die Funktionalität da recht überschaubar ist.
Und Hand aufs Herz: so toll ist das Asm-Programm auch wieder nicht 
geschrieben.

Da
1
TIM0wait:                   ; again
2
    sbis   ADCSRA, ADIF       
3
    rjmp   TIM0wait
steckt sowieso ein Fehler drinn (ADIF wird nirgends zurückgesetzt). Da 
allerdings der ADC alle 1 Sekunde ausgelesen wird und es ziemlich egal 
sein dürfte, ob der Messwert 1 Sekunde alt ist, spielt das kaum eine 
Rolle.

Was mich allerdings viel mehr verblüfft: da ist keine Mittelung drinnen. 
Da das Ganze sich an der Helligkeit eines ADC aufhängt und sich der 
Schwellwert für Hell/Dunkel selbst kalibriert, könnte da 
Fremdlichteinfall schon ein erhebliches Wörtchen mitzureden haben. Ich 
seh aber keine Behandlung dafür, zb. in Form eines gleitenden 
Mittelwertes.

: Bearbeitet durch User
von Dieter F. (Gast)


Lesenswert?

Karl Heinz schrieb:
> Was mich allerdings viel mehr verblüfft: da ist keine Mittelung drinnen.
> Da das Ganze sich an der Helligkeit eines ADC aufhängt und sich der
> Schwellwert für Hell/Dunkel selbst kalibriert, könnte da
> Fremdlichteinfall schon ein erhebliches Wörtchen mitzureden haben. Ich
> seh aber keine Behandlung dafür, zb. in Form eines gleitenden
> Mittelwertes.


Zu viel Asche sei auch nicht auf das Haupt des ursprünglichen 
Entwicklers gelegt - er hat eine mögliche Mittelwertbildung auch 
angesprochen:

"It might be nice to calculate a moving average for Maxlight and 
Minlight to adapt to the changing light in different seasons. I leave 
this to your ingenuity, otherwise it's enough to do a reset once in a 
while and the microcontroller will establish new values."

Den Link zur Original-Seite habe ich ein paar Posts zurück eingestellt.

Übrigens arbeitet die Schaltung im Original auch mit 15 V ...

von Dieter F. (Gast)


Lesenswert?

Dieter Frohnapfel schrieb:
> @Uwe: Wusste ich nicht und finde ich lustig - wäre ja dann im Endeffekt
> genau wie die aktuelle Lösung. Werde ich mal ausprobieren, ob der
> Compiler da nicht meckert ...

Oh - böse reingefallen :-)

Hatte das #DEFINE gar nicht richtig wahrgenommen und glatt als .def 
gewertet. O.K., tricky - und funktioniert.

Aber eigentlich hebelt das ja nur die Compiler-Warnung aus und "wiegt in 
trügerischer Sicherheit". Ob das jetzt sinniger ist wie die mehrfache 
Re-Definition mit Warnung zu akzeptieren (und immer wieder daran 
erinnert zu werden)?

von Axel R. (Gast)


Lesenswert?

>>...Below is the Marderschreck version which is using...
This is a "Marderschreck"! It schrecks Marders. :)

Hey, gab es das nicht auch als deutschen Artikel?

http://s2.quickmeme.com/img/2b/2b801c8b1404aff14b61e9432c86fb9aa43a20b5083b787d62d1570ded4bcaf3.jpg

von Axel R. (Gast)


Lesenswert?

Sowas find ich schlimm:
1
TIM0go:                     ; every second ->get ADC value  PB4 ADC3 sensor LDR light 
2
    ldi  itemp,0b11010011   ; ADC init single conversion presc 8:
3
    out   ADCSRA, itemp

Was uns "0b11010011" wohl wieder sagen soll? Sind die einzelnen 
Bitnummer und deren Bedeutung  nicht mit "sprechenden Namen" in der 
DEVICE Description beschrieben?
1
TIM0go:                     ; every second ->get ADC value  PB4 ADC3 sensor LDR light 
2
    ldi  itemp,0b11010011   ; ADC init single conversion presc 8:
3
    out   ADCSRA, itemp
4
5
ADCSR
6
Bit 7    6    5    4    3    2     1     0
7
8
    ADEN ADSC ADFR ADIF ADIE ADPS2 ADPS1 ADPS0
Mal abgesehen davon, das es kein ADCSR"A" beim Tiny15 gibt, könnte man 
das so schreiben:
1
TIM0go:                     ; every second ->get ADC value  PB4 ADC3 sensor LDR light 
2
    ldi  itemp,(1<<ADEN)|(1<<ADSC)|(1<<ADIE)|(1<<ADSP1)|(1<<ADSP0)   ; ADC init single conversion presc 8:
3
    out   ADCSR, itemp

Da weis (fast) jeder, was gemeint sein soll, OHNE erst im Datenblatt 
nach zu sehen.
ADEN = 1
ADSC = 1
ADIE = 1
die beiden Vorteiler(PreScaler) NULL und EINS = beide auf 1

und so weiter.

Ich sehe es mir nach Abendbrot weiter an.

von Dieter F. (Gast)


Lesenswert?

Axel R. schrieb:
> ldi  itemp,(1<<ADEN)|(1<<ADSC)|(1<<ADIE)|(1<<ADSP1)|(1<<ADSP0)
> Da weis (fast) jeder, was gemeint sein soll, OHNE erst im Datenblatt
> nach zu sehen.

O.K., ich oute mich als Anfänger - der Kommentar

> ADC init single conversion presc 8:

sagt mir mehr.

Leider sind Kommentare geduldig und spiegeln nicht immer die aktuelle 
Programm-Wahrheit wider - sind also mit Vorsicht zu geniessen.

Wenn ich sicher sein will schaue ich allemal im Datenblatt nach. Keine 
Ahnung ob die Aliase durchgängig identisch sind (übrigens sollte es wohl 
ADPS.. statt ADSP.. heissen) und z.B. immer den gleichen Prescale-Faktor 
etc. bedeuten.

von Axel R. (Gast)


Lesenswert?

richtig! Das hatte ich bei Timer0 und bei Timer2 schon einmal erlebt. Da 
sind dann auf einaml ganz andere Teilerverhältnisse bei gleichen 
Bitwertigkeiten herausgekommen. Muss man aufpassen.
>(übrigens sollte es wohl ADPS.. statt ADSP.. heissen)
Sollte es wohl.. ;) Heisst ja PreScaler und nicht SrePcaler - hihi.
Wer ich Baumann, würde mir hierzu ein toller Schüttelreim einfallen. 
Fällt aber nicht.

von Adrian (Gast)


Lesenswert?

ich habe kein Attiny 15 sondern nur einen Attiny 25:)

von der alte Hanns (Gast)


Lesenswert?

Steht zu klein der Vor-Teiler,
ist er mehr ein Fort-Eiler.


>Wer ich Baumann

Wer? Ich? Baumann? - Nee!

von Karl H. (kbuchegg)


Lesenswert?

Axel R. schrieb:


> Da weis (fast) jeder, was gemeint sein soll, OHNE erst im Datenblatt
> nach zu sehen.
> ADEN = 1
> ADSC = 1
> ADIE = 1

AUtsch.
Dann stimmt die Abfrage auf ADIF ja doch, wenn auf den ADC gewartet 
wird.

Sorry. Aber das ist doch von hinten durch die Brust ins Auge. Und das 
dann auch noch unter verschärften Bedingungen durch maximale 
Code-Obfuscation.

von Karl H. (kbuchegg)


Lesenswert?

Dieter Frohnapfel schrieb:
> Axel R. schrieb:
>> ldi  itemp,(1<<ADEN)|(1<<ADSC)|(1<<ADIE)|(1<<ADSP1)|(1<<ADSP0)
>> Da weis (fast) jeder, was gemeint sein soll, OHNE erst im Datenblatt
>> nach zu sehen.
>
> O.K., ich oute mich als Anfänger - der Kommentar
>
>> ADC init single conversion presc 8:
>
> sagt mir mehr.

Der ist auch ok.

Aber wenn du im Code das hier siehst:
0b11010011
dann heisst das erst mal seitenweise Datenblatt suchen, bis feststeht, 
welches 1 Bit denn eigentlich was macht.

In
(1<<ADEN)|(1<<ADSC)|(1<<ADIE)|(1<<ADSP1)|(1<<ADSP0)
ist das alles wesentlich klarer.
Welcher Vorteiler durch die ADSPx Bits eingestellt ist, wird man nicht 
auswenig wissen und wird man nachsehen müssen.
Aber ADEN heisst "ADc Enable". D.h. dieses Bit schaltet den ADC ein.
ADIE bedeutet "ADc Interrupt Enable". D.h. hier wird der Interrupt 
eingeschaltet
ADSC bedeutet "ADc Start Conversion". D.h. dieses Bits startet einen ADC 
Durchgang.

Die Bedeutung der Namen merkt man sich viel leichter, als welches Bit an 
welcher Bitposition steht.
Und bei den Timern mit ihren mehreren Konfigurationsregistern ist das 
alles dann noch einen Gang schlimmer.

>
> Leider sind Kommentare geduldig und spiegeln nicht immer die aktuelle
> Programm-Wahrheit wider - sind also mit Vorsicht zu geniessen.

Eben.
Und genau deshalb ist es einfacher sich an den Bitnamen zu orientieren, 
anstatt da im Datenblatt noch eine Extrarunde einzufügen und erst mal 
identifizieren zu müssen, welches 1 Bit eigentlich welche Bedeutung hat.
Die Binärschreibweise hat etwas von "sich selbst Prügel zwischen die 
Beine werfen und sich selbst das Leben maximal schwer zu machen"

: Bearbeitet durch User
von Karl H. (kbuchegg)


Lesenswert?

Karl Heinz schrieb:
> Axel R. schrieb:
>
>
>> Da weis (fast) jeder, was gemeint sein soll, OHNE erst im Datenblatt
>> nach zu sehen.
>> ADEN = 1
>> ADSC = 1
>> ADIE = 1
>
> AUtsch.
> Dann stimmt die Abfrage auf ADIF ja doch, wenn auf den ADC gewartet
> wird.

Hmm.
Nein, stimmt trotzdem nicht.
Denn je nachdem wann genau der Interrupt auftritt, wird das auftauchen 
des ADIF Flags hier
1
TIM0go:            ; every second ->get ADC value  PB4 ADC3 sensor LDR light 
2
    ldi  itemp,0b11010011   ; ADC init single conversion presc 8:
3
    out   ADCSRA, itemp
4
TIM0wait:                   ; again
5
    sbis   ADCSRA, ADIF       
6
    rjmp   TIM0wait
nicht registriert. Der Interrupt braucht nur zum falschen Zeitpunkt 
kommen und dann hängt das Programm.

: Bearbeitet durch User
von Adrian (Gast)


Lesenswert?

der alte Hanns schrieb:
> Steht zu klein der Vor-Teiler,
> ist er mehr ein Fort-Eiler.
>
>>Wer ich Baumann
>
> Wer? Ich? Baumann? - Nee!

also ist der prescaler zu klein?

von der alte Hanns (Gast)


Lesenswert?

Nein, bitt' um Verzeihung, das war nur eine völlig unfachliche Replik 
auf den Beitrag von axelr.
Nachdem sich Andere so ausführlich um die Sache kümmern, werde ich mich 
hüten, da auch noch mitmischen zu wollen.

von Adrian (Gast)


Lesenswert?

Karl Heinz schrieb:

> Nein, stimmt trotzdem nicht.
> Denn je nachdem wann genau der Interrupt auftritt, wird das auftauchen
> des ADIF Flags hierTIM0go:            ; every second ->get ADC value
> PB4 ADC3 sensor LDR light
>     ldi  itemp,0b11010011   ; ADC init single conversion presc 8:
>     out   ADCSRA, itemp
> TIM0wait:                   ; again
>     sbis   ADCSRA, ADIF
>     rjmp   TIM0wait
> nicht registriert. Der Interrupt braucht nur zum falschen Zeitpunkt
> kommen und dann hängt das Programm.

 Inwiefern kann er in seiner Schleife hängen? Am Ausgang bekomme ich 
meine 20-40khz aber kann sie nicht mit pb3 ein oder abschalten?

von Karl H. (kbuchegg)


Lesenswert?

Adrian schrieb:
> Karl Heinz schrieb:
>
>> Nein, stimmt trotzdem nicht.
>> Denn je nachdem wann genau der Interrupt auftritt, wird das auftauchen
>> des ADIF Flags hierTIM0go:            ; every second ->get ADC value
>> PB4 ADC3 sensor LDR light
>>     ldi  itemp,0b11010011   ; ADC init single conversion presc 8:
>>     out   ADCSRA, itemp
>> TIM0wait:                   ; again
>>     sbis   ADCSRA, ADIF
>>     rjmp   TIM0wait
>> nicht registriert. Der Interrupt braucht nur zum falschen Zeitpunkt
>> kommen und dann hängt das Programm.
>
>  Inwiefern kann er in seiner Schleife hängen?

Das Programm macht einen
>>     sbis   ADCSRA, ADIF

und das ADIF Flag ist noch nicht gesetzt.
Just in diesem Moment wird der ADC fertig und setzt das Flag
Als Folge davon wird die ISR aufgerufen, die lediglich einen
1
    reti
macht. Aber: Als Nebeneffekt wird das ADIF Flag mit Einsprung in die ISR 
gelöscht.

Fazit: Obwohl der ADC fertig geworden ist, ist das ADIF Flag trotzdem 
gelöscht und das Programm schleift ewig in
1
 TIM0wait:                   ; again
2
     sbis   ADCSRA, ADIF
3
     rjmp   TIM0wait

Und dann gibt es ja auch noch den Timer Interrupt, der das Timing in 
dieser Schleife durcheinander wirbeln kann, so dass man noch nicht 
einmal sagen könnte: Glück gehabt, denn die Anzahl der Takte, die der 
ADC braucht ist bekannt und geht sich immer so aus, dass der 
ADC-Interrupt immer an der gleichen Stelle auftreten wird.

Mach es ordentlich.
ADC mittels setzen von ADSC starten. Das ADSC Bit bleibt solange 
gesetzt, wie der ADC am arbeiten ist und wenn der ADC fertig ist, dann 
setzt er dieses Bit wieder auf 0 zurück. Den ADC Interrupt braucht dazu 
kein Mensch. Der macht es nur kompliziert und fehleranfälliger.


Und bei der Gelegenheit benutzt du dann auch gleichg eine ordentliche 
Schreibweise zum Setzen der Bits und nicht dieses Binär-gehampel
...
1
....
2
; AD-Converter setup:
3
    ; If ADLAR is set, the result is left-adjusted, 8 bit
4
    ; ADC channel 3
5
    ldi   temp, (1<<ADLAR) | 3
6
    out   ADMUX, temp
7
    
8
    ldi  temp, (1<<ADEN) | (1<<ADPS1) | (1<<ADPS0) ; ADC init single conversion presc 8:
9
    out   ADCSRA, temp
10
11
....
12
....
13
14
TIM0go:            ; every second ->get ADC value  PB4 ADC3 sensor LDR light
15
    sbi    ADCSRA, ADSC     ; on your marks, ready, set, go!
16
                            ; ADC is working right now
17
18
TIM0wait:                   
19
    sbic   ADCSRA, ADSC     ; is the ADC still working?  
20
    rjmp   TIM0wait         ; yes: wait for the ADC
21
22
    in   ADClight, ADCH     ; high byte only, because of ADLAR
23
....

... und du hast deine Ruhe

> Am Ausgang bekomme ich
> meine 20-40khz aber kann sie nicht mit pb3 ein oder abschalten?

So ungefähr.
Das Programm arbeitet nicht mehr richtig. Alles über eine ISR 
getriebene, bzw. von der Hardware getriebene funktioniert noch. Der Rest 
ist allerdings dann nur noch Schweigen.

: Bearbeitet durch User
von Uwe (Gast)


Lesenswert?

Hi,
@Karl Heinz
>Das Programm macht einen
>>>     sbis   ADCSRA, ADIF
>und das ADIF Flag ist noch nicht gesetzt.
>Just in diesem Moment wird der ADC fertig und setzt das Flag
>Als Folge davon wird die ISR aufgerufen, die lediglich einen    reti
>macht. Aber: Als Nebeneffekt wird das ADIF Flag mit Einsprung in die ISR
>gelöscht.

Wie kommst du darauf? Wo im Init wird ADIE gesetzt?

>; ADCSR: ADEN ADSC ADFR ADIF ADIE ADPS2 ADPS1 ADPS0
>ldi  temp,0b11010011   ; ADC init single conversion presc 8:

einen schönen Tag noch, Uwe

von Axel R. (Gast)


Lesenswert?

Hi,
Zusammen mit dem Globalen Interruptfreigabebit bestimmt ADIE, ob die 
Interruptandresse in der Sprungtabelle angesprungen wird. Sonst wird 
einfach nur das Flag gesetzt. Darauf kann man pollen, muss es dann aber 
- um zu Fuß zu löschen - mit 1 beschreiben. Denn normalerweise wird das 
INt Flag durch die Hardware bei Ausführung(Einsprung) der ISR gelöscht.

Ich bin auch gerade dabei, mir das hier ernsthaft anzusehen. Ich 
tendiere auch dazu, das Conversion-Bit (SC) zu pollen.
Oder man machts "ordentlch" im Interrupt.
Ist aber Assembler. Da bin ich nicht über alle Fallstricke informiert 
und etwas aus der Routine(Übung).

Ich kann Elm Chan seine Melodiespieldose zum Übern und als Inspiration 
empfehlen. Auch die Hilfsmakros sind excellent!

http://elm-chan.org/works/mxb/report.html
http://elm-chan.org/works/mxb/mg.zip

Hier ist mir noch eine ungelenkheit aufgefallen
1
sndloop:  sbis  PINB, sndpin    ; skip if sndpin high
2
    rjmp  sndpinlo    ; switch lo, sweep off
3
    rjmp  sndpinhi    ; switch hi, sweep on
4
sndpinlo:
5
    rjmp  lightloop    ; goto lightloop

Funktioniert, klar. Aber was wäre, wenn man SBIC genaommen hääte, statt 
SBIS? Wäre ja schon um einiges übersichtlicher...

Leider hatte ich nicht allzuviel Zeit. Ich habe neue Hardware und war 
beim Aufsetzen vom Win8.1...
So habe ich jetzt AVR Studio6.2 und passe den Marderschreck mal darauf 
hin an.

Im Programm fange ich übrigens nicht gleich mit Assembler an, sondern 
mit einer kleinen Bestandsaufnahme. So kann man sich besser am 
eigentlichen Ziel orientieren.
Hier ein Auszug:
1
;Was soll geschehen?
2
Bei Nachtanbruch soll der Marderschreck Marder schrecken. Dazu sendet er kurze Ultraschallsignale von einigen Millisekunden Dauermit einer Pause.
3
Die Frequenz, die Pause und die Dauer der Ultraschallsignale sollten (logischerweise) unvorhersehbar sein, um die Gewoehnung zu verzoegern.
4
5
Zum erzeugen der Ultraschallsiganle verwenden schlage ich den Timer1 im CTC Mode vor. Einmal eingestellt macht der alles in Hardware.
6
Den Systemtimer erzeugen wir im Output-Compare-Match des Timer0. Da muss dann auch nichts nachgeladen werden.
7
Moechte man bei 8bit Zaehlumfang bleiben, ist die kleinste Zeiteinheit 5,6125(dez) Minuten. (60Sekx60Minx24Stu)/256=337.5 Sekunden. 
8
Da der US-Sound keine 5 Minuten am Stueck fiepen soll, erweitern wir den Zaehlbereich mit einer zweiten Variable auf 16 bit und erhalten 
9
als kleinste Zeitscheibe 60x60x24/65'536=1.3184 Sekunden. Auf ein,zwei Sekunden kommt es nicht an. 
10
Den Zaehler bei Eintritt der Dunkelheit auf NUll zu setzen, bietet sich an.

So in der Art. Danz ganze in deutsch ;)

Variablen im SRAM, soweit möglich.

Gruß
Axel

von Axel R. (Gast)


Lesenswert?

wer rechtschreibfehler findet...

von Adrian (Gast)


Lesenswert?

Axel R. schrieb:
> auf NUll z

Kann ich eig jetzt nun die vorgeschlagene Änderung von Karl Heinz 
übernehmen oder muss ich mich jetzt an einer anderen Stelle im Code 
umschauen?

von Axel R. (Gast)


Lesenswert?

Kannst Du. Sollte gehen.
Sind denn jetzt doch noch Änderungen von Nöten? Ich dachte, jetzt geht 
alles..

@Karl Heinz
ich habe versehentlich ein (1<<ADIE) unterstellt. Da ist aber kein 
(1<<ADIE) beim Organisieren des ADCs dabei. Ich habe mich schlicht 
verzählt. Siehst Du, so kommt das mit den 0b1111111einsen. Schnell liest 
man was, was garnicht ist.

Ich kann leider heute nicht mehr weitermachen:
Cleartype und Windows 8.1 gehen garnicht. Zumindest nicht mit AVR Studio 
6.2.
[OT]
Mir ist richitg gehend schlecht, also übel (kopfschmerzen vom kucken).
ich habe jetzt eine alte Version vom AVR Studio installiert und auch mal 
Programmers Notepad. Das "alte" AVR Studio verwendet augenscheinlich 
einen anderen Renderer für die Schrift. Da ist alles super. Unglaulich. 
Wenn ich so eine Arbeit abliefern würde. So ein Matsch auf dem teuren 
LG!

BTW: im Texteingabefeld hier gehts auch.
Oben links im Form unter "Name:" das fett gedruckte Wort "Betreff:" 
sieht so aus:
Be tre ff: Übertrieben gesehen. da stimmen die Abstände der einzelnen 
Buchstaben nicht mehr und die entstandenen Zwischenräume werden durch 
"Matsch" aufgefüllt.
ich hatte das hier schon einmal angeprangert
Beitrag "WIN7 Schrift verwaschen / einfach nur schlecht"

Aber ist ja ein anderes Thema. Kantenglättung raus UND Cleartype raus 
und stundenlange Suche nach passenden Schriftarten beheben die Symptome 
etwas. Muss ich dann mal machen...
Benachrichtigungsemails gehen ja auch nicht ordentlich. kein Klickbarer 
Link. ch habe ja schon vorgeschlagen, das der "Versender" (also Andreas) 
nur ein Leerzeichen anhängen muss, damit alles wie gewohnt funktioniert.
Beitrag "Email Benachrichtigung Hyperlink unter WIN 8.1"
Als wenn ich der einzige wäre, der Windows 8.1 hat.
[/OT]

von F. F. (foldi)


Lesenswert?

Axel R. schrieb:
>
> Als wenn ich der einzige wäre, der Windows 8.1 hat.
> [/OT]

Als ich meinen Rechner gekauft hatte, war da schon Win 8 drauf und nach 
dem Update auf Win 8.1 kam der nicht mehr aus dem Stromsparmodus hoch, 
obwohl ich das alles händisch ausgestellt hatte.
Das "Auffrischen" war dann ein Herstellen des Ursystems, mit kompletten 
Datenverlust.
Ich habe nun alle Updatefunktionen ausgestellt.

von Karl H. (kbuchegg)


Lesenswert?

Uwe schrieb:

>>Als Folge davon wird die ISR aufgerufen, die lediglich einen    reti
>>macht. Aber: Als Nebeneffekt wird das ADIF Flag mit Einsprung in die ISR
>>gelöscht.
>
> Wie kommst du darauf? Wo im Init wird ADIE gesetzt?

Asche auf mein Haupt. Ich hab mich auf
Beitrag "Re: Marderschreck Softwareproblem"
verlassen

von Karl H. (kbuchegg)


Lesenswert?

Adrian schrieb:
> Axel R. schrieb:
>> auf NUll z
>
> Kann ich eig jetzt nun die vorgeschlagene Änderung von Karl Heinz
> übernehmen

Ja, kannst du. Auch wenn es  nach erneuter Überlegung nicht das Problem 
war.
Es ist du übliche Art, wie man den ADC startet und abfragt. Da kann am 
wenigsten schief gehen.

von Axel R. (Gast)


Lesenswert?

Karl Heinz schrieb:
> Asche auf mein Haupt. Ich hab mich auf
> Beitrag "Re: Marderschreck Softwareproblem"
> verlassen

sorry fot that agayn.

Karl Heinz schrieb:
> ... auch wenn es  nach erneuter Überlegung nicht das Problem
> war.

Die Frage stell(t)e ich mir auch. Bei unserer ganzen OT Plauderei: worum 
ging es eigentlich, was war konkret das Problem?
Ich war bis eben der Meinung, das die Assembler-source jetzt fehlerfrei 
compiliert und macht, was sie soll...

von Adrian (Gast)


Lesenswert?

Axel R. schrieb:
> Kannst Du. Sollte gehen.
> Sind denn jetzt doch noch Änderungen von Nöten? Ich dachte, jetzt geht
> alles..
>

Ich habs nun geändert soweit stimmt alles aber wenn ich mein 
Bewegungschalter anklemme schaltet er nicht das signal ein oder aus.

Vielleicht hab ich ein Fehler bei der Pinbelegung gemacht. Ich hab das 
folgendermaßen so angeschlossen



.equ  Nightout  = PB0    ; Bewegungsmelder
          ; PB1 pwm out
.equ  DayLow    = PB2    ; output DayLow /Frequenz an PB1
;.equ  signal    = PB2    ; output signal hi when sweep on
.equ  sndpin    = PB3    ; input  Bewegungsmelder
.equ  LDRin    = PB4    ; LDR ist nicht bei mir angeschlossen

Also den Bewegungsmelder habe ich mit dem NC an PB3 angeschlossen und 
mit der COM-Seite an PB0

Das Frequenz kommt aus meinen PB1 raus aber wenn ich Daylow auf 1 ändere 
statt PB2 bekomme ich nicht mehr die frequenz

von Axel R. (Gast)


Lesenswert?

Nightout(PB0) ist also ein Ausgang, der HIGH Pegel führt, wenn es Nacht 
wird. Nun hast Du keinen Fotowiderstand(LDR) angeschlossen(PB4).

Wenn Du Dir die Porteinstellungen ansiehst,
1
ldi  temp,0b00001000   ; set pullup 
2
out  PORTB,  temp    ; 1 = pull-up , 0 = float
3
ldi  temp,0b00000111   ; output, 1 = output , 0 = input
4
out  DDRB,temp         ; to data direction register

siehst Du, das PORTB0 als Ausgang konfiguriert wurde. ->OK
man sieht auch, das PORTB4 als Eingang für den LDR dient. DDRB ist auf 
NULL an der Stelle (Eingang) und PORTB ist auch auf NUll(kein Pull-up 
aktiviert).
Im Anschlussplan steht neben PB4 drann:
1
; night detect, +5V - R1 - PB4 - LDR - Gnd
Bei deiner Schaltung
Beitrag "Re: Marderschreck Softwareproblem"
ist PB4 offen. Ist das tatsächlich so, oder hast Du einen Widerstand 
nach Plus gelötet? Wenn Du einen Widerstand gegen Plus gelötet hast und 
keinen LDR, so ist immer NACHT bei Dir. (LDR nicht da-> hochohmig, wie 
bei Nacht)
Wenn nichts an PB4 hängt eiert der ADC-Eingang irgentwo in der Luft rum. 
Wenn Du keinen Widerstand anlöten magst oder kannst, so aktiviere den 
eingebauten Pull-up. Dann ist bei Dir eben immer Nacht und der Ausgang 
"Nightout" PB0 führt immer HIGH-Pegel. Den Pull-up aktiverst Du so:
1
ldi  temp,0b00011000   ; set pullup an PB3 und PB4
2
out  PORTB,  temp    ; 1 = pull-up , 0 = float
3
ldi  temp,0b00000111   ; output, 1 = output , 0 = input
4
out  DDRB,temp         ; to data direction register

Jetzt zum Bewegungsmelder: der hat also einen "NC" und einen "COM". Hat 
der auch einen "NO"?

Wenn Du "NC" deines Bewegungsmelders an "Nightout" klemmst, bekommt er 
von der Seite H-Pegel. Wenn keine Bewegung detektiert wurde, ist der 
Schalter geschlossen ("NC"-> Normally closed). der Soundeingang PB3 hat 
also auch H-Pegel. Dauersweep wäre die logische KOnsequenz.
Tritt jetzt Bewegung auf, wird der Schalter geöffnet.
Soundeingang PB3 liegt jetzt aber immernoch auf H-Pegel! Obwohl der 
Bewegungsmelder den Schaltkontakt geöffnet hat. Muss ja auch, weil der 
interne Pull-up Widerstand an PORTB3 aktiviert ist. Hier lötest Du einen 
1K Ohm von PB3 nach Minus. 10K gehen auch, 4K7 ebenso.
steht ja auch da:
1
  ; input   switch hi sweep, lo off
lo bekommt er von dem zusätzlichen 1K-Widerstand und high vom 
Bewegungsmelder, WENN es denn "Nachts" ist. PB4 an High Pegel (extern 
oder intern)

von Adrian (Gast)


Lesenswert?

> Bewegungsmelder, WENN es denn "Nachts" ist. PB4 an High Pegel (extern
> oder intern)

PB4 ist bei mir auch nicht angeschlossen. Ist ja auch nicht vonnöten 
oder?
danke soweit hab ich dass alles geändert :) Hoffe mal jetzt gehts

von Adrian (Gast)


Lesenswert?

Dann habe ich eine frage wenn ich bei den fuses CHOUT das Bit auf 0 
setzte kann ich ja messen ob die interne clock von mein attiny stimmt? 
Am ausgang bekomme ich ja meine gewünschte frequenz aber wenn ich am 
xtal1 (glaub ich) also an pb3 die interen Frequenz messen möchte komme 
ich auf 2.3mhz aber es sollte doch laut datenblatt mit 25mhz laufen?

von Adrian (Gast)


Lesenswert?

Hab soweit alles übernommen wies mir beschrieben wurde :) jetzt 
funktonierst aber ich hätte noch weitere Fragen die noch offen geblieben 
sind. Stellt der Timer1 die Gesamtfrequenz ein und Timer0 sorgt für den 
Interrupt?

von Udo S. (urschmitt)


Lesenswert?

Wenn ich mir den Thread so anschaue, dann sollte man vieleicht den 
Thread ausdrucken und in den Motorraum packen.
Wenn das der Marder sieht haut er ab und kommt nie wieder :-)
(SCNR)

von Schimanski (Gast)


Lesenswert?

> PB4 ist bei mir auch nicht angeschlossen. Ist ja auch nicht vonnöten
> oder?

im Gegenzug etwas weiter oben:

> Wenn nichts an PB4 hängt eiert der ADC-Eingang irgentwo in der Luft rum.
> Wenn Du keinen Widerstand anlöten magst oder kannst, so aktiviere den
> eingebauten Pull-up. Dann ist bei Dir eben immer Nacht und der Ausgang
> "Nightout" PB0 führt immer HIGH-Pegel.

Ist also schon vonnöten, dort wenigstens dafür zu sorgen, das dort 
"Nacht" herrscht. Also 1K nach Plus oder wenigstens den internen 
Widerstand nach Plus aktivieren.

Mit den Timern weiss ich jetzt nicht, welcher in DEINER Schaltung was 
macht.
Bei mir ist TIMER1 der, der bei Bedarf den Ultraschall-QUIICK erzeugt 
und Timer0 im CTC die 10ms Zeitscheibe bereitstellt.

EDIT ja ist hier auch so. Timer0 bei Überlauf macht die 
Systemzeitscheibe und zählt alle 10msekunden ein Register hoch. nach 100 
Dinger wird die vergangene Sekunde angezeigt und der zähler wieder auf 
Null gestellt. im Anzeiger wird dann das Programm aufgerufen. Also alle 
Sekunde passiert etwas.

Fuses brennen: Was nimmst Du dafür? auch das AVR Studio? da kann man das 
ja recht komfortabel alles einstellen. Kannst ja mal den Reiter "Fuses" 
screenshooten. Da sollten 1.6Mhz am CKout zu messen sein, wenn mich 
alles täuscht. Weil der 25er ja im 15er Kompatibilitätsmode läuft.

von Schimanski (Gast)


Lesenswert?

die 25Mhz dienen nur Timer1 als (asynchroner) Takt. Den siehst Du 
draussen nicht. Nur den Systemtakt. der hängt ja von den Fuses ab.

von Adrian (Gast)


Lesenswert?

Axel R. schrieb:
> Nightout(PB0) ist also ein Ausgang, der HIGH Pegel führt, wenn es
> Nacht
> wird. Nun hast Du keinen Fotowiderstand(LDR) angeschlossen(PB4).
>  PB4 an High Pegel (extern
> oder intern)

Ich hab mal softwaretechnisch versucht pb4 auf high zustellen jedoch 
messe ich nur low signal

ldi  temp,0b00011000   ; set pullup an PB3 und PB4
out  PORTB,  temp    ; 1 = pull-up , 0 = float

Kann leider kein widerstand an vcc anlöten da ich kein platz auf meiner 
platine leider habe.
Was kann ich tun um den auf high zu bekommen?

Ich bekomme am pb2 immer ein rechecksingal raus und weiss nicht warum. 
Ich kanns nicht so einstellen dass es nur high oder low ist. Der Pin ist 
ja nur dafür da um auszugeben ob es jetzt nacht ist oder nicht. Aber es 
macht i-wie beides gleichzeitig.

Wenn pb4 bei mir low ist sollte eig pb0 auch low sein, jedoch bleibt pb0 
immer high.
Und immer noch mein altes problem ich kann immer noch nicht pb3 mit 
einem schalter den ausgang pb1 kontrollieren.

Ich weiss, es langsam viel was hier alles im Forum zusammen getragen 
kommt aber ich hab bis jetzt alles versucht text zeilen zu ändern, 
einige passagen rauszunehmen jedoch blieb es wie nach wie vor

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.