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^^
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
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.
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"
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
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
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 ...
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.
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.
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.
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.
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
> 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.
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.
> 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).
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 ...
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
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 ...
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.
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?
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.
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
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?
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?
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?
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 :-)
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
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.
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.
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 ...
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 :)
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.
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:)
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 :)
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.
> 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!?
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?
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.
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
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.
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 ...
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)?
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.
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.
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.
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.
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"
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.
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?
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.
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?
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
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.
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
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.htmlhttp://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
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?
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]
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.
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
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.
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...
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
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,
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:
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)
> 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
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?
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?
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)
> 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.
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