Hi
>WARUM das jetzt???
Die Adressen der ADC-Register liegen ausserhalb des Adressbereichs von
'sbi', 'sbic'. Da hilft nur Lesen des IO-Registers in ein Register.
'in/out' gehen auch nicht.
Neuling schrieb:> Und wieso Zeile 42 raus?
das sollte ein dezenter Hinweis sein, dass so Mini-Ausschnitte aus
Programmen selten für die Fehlersuche sinnvoll sind
spess53 schrieb:> Die Adressen der ADC-Register liegen ausserhalb des Adressbereichs von>> 'sbi', 'sbic'. Da hilft nur Lesen des IO-Registers in ein Register.>> 'in/out' gehen auch nicht.> rjmp wait_adc> MfG Spess
Ist das langsamer als auf dem Mega8? Sind ja mehr Befehle?
Alter Fux schrieb:> 42 ist die Antwort auf alle Fragen :-)
Sorry sollte ich jetzt einwenig hart sein. A...... klasse einen Anfänger
zu verarschen hast es ja voll drauf. Hoffe du als Experte bekommst mal
auf eine Frage auch so eine Irreführung.
Hi
>das sollte ein dezenter Hinweis sein, dass so Mini-Ausschnitte aus>Programmen selten für die Fehlersuche sinnvoll sind
In dem Fall war doch alles da: ATMega88, ADC-Register ,IO-Befehle und
Fehlermeldung 'Operand 1 out of range: 0x7a'.
Gleich los Schreien statt Denken ist halt einfacher.
MfG Spess
Hi
>Ist das langsamer als auf dem Mega8? Sind ja mehr Befehle?
Ja. Geht aber nicht anders. Aber da du sowieso auf die Wandlung wartest,
ist das vollkommen egal.
MfG Spess
gerd schrieb:> Neuling schrieb:>>> Und wieso Zeile 42 raus?>>>> Siehe Netiquette - Äußere Form!>>>> - gerd
Wo habe ich mit meiner Frage die Netiquette nicht eingehalten das ich so
verarscht werde?
Ich glaube da sollte hier jemand anderes mal die Netiquette einhalten.
Es gibt aber auch User die NORMAL und echt Hilfsbereit sind
Danke spess53
spess53 schrieb:> Ja. Geht aber nicht anders. Aber da du sowieso auf die Wandlung wartest,>> ist das vollkommen egal.>>>> MfG Spess
Also lieber einen Mega8 als ein Mega88 ???
Neuling schrieb:> Sorry sollte ich jetzt einwenig hart sein. A......
Um es kurz zu machen, Zitat:
"
Klare Beschreibung des Problems. Besonders für Anfänger gilt: Gerade am
Anfang ist es immer gut zu sagen, was man erreichen will und nicht so
sehr Annahmen darüber zu treffen, wie man es erreichen könnte und dann
das Wie zu hinterfragen. Oft ist der Denkfehler nämlich schon im Ansatz
und man kann besser helfen, wenn man das Ziel des Fragenden kennt.Im
Betreff angeben um welchen Controllertyp es geht (AVR, PIC, ...) Welcher
Compiler in welcher Version (Z.B WINAVR 17032007, BASCOM-AVR 1.4; nicht:
"neueste Version"!) Das Problem in Zahlen fassen! Nicht einfach
schreiben "so schnell wie möglich", "so stromsparend wie möglich" etc,
sondern mal ein paar Zahlen nennen. X MHz, Y ms, Z µA etc. Wenn man
keine exakte Vorstellung davon hat, sollte wenigstens eine Größenordnung
angegeben werden (1..5 MHz, <1mA etc.) Welcher IC in welchem Gehäuse.
Wenn Datenblätter vorhanden sind diese ggf. anhängen oder als Link
angeben. Daran denken, dass die Leute im Forum nicht neben einem sitzen
und alles so vor sich sehen wie der Fragesteller Klare Fragen
formulieren und nicht davon ausgehen, dass eine diffuse
Zustandsbeschreibung als Frage interpretiert wird.
"
denke mal drüber nach.
Kompletter Code ist i.d.R besser und hier im Forum gewünscht. Aber keine
Regel ohne Ausnahme. Für mich war die prägnante Anfangsfrage auch
vollständig. Wenn alle Neulinge 2011 ihr Problem so auf den Punkt
bringen, sehen wir einem rosigen Jahr entgegen :-)
Hi
>Also lieber einen Mega8 als ein Mega88 ???
Blödsinn. Das merkst du überhaupt nicht. sbi/cbi/sbis/sbic kannst du
auch beim ATMega8 nicht auf alle IO-Register anwenden. Also, warum
diesen Dinosaurier verwenden?
MfG Spess
Neuling schrieb:> Wo habe ich mit meiner Frage die Netiquette nicht eingehalten das ich so> verarscht werde?>> Ich glaube da sollte hier jemand anderes mal die Netiquette einhalten.
Möglich! Ich wollte lediglich deine Frage beantworten, warum jemand nur
"42" gepostet hat (ob das nun angebracht war oder nicht).
- gerd
Alter Fux schrieb:> Um es kurz zu machen, Zitat:>> "> Klare Beschreibung des Problems. Besonders für Anfänger gilt: Gerade am> Anfang ist es immer gut zu sagen, was man erreichen will und nicht so> sehr Annahmen darüber zu treffen, wie man es erreichen könnte und dann> das Wie zu hinterfragen. Oft ist der Denkfehler nämlich schon im Ansatz> und man kann besser helfen, wenn man das Ziel des Fragenden kennt.Im> Betreff angeben um welchen Controllertyp es geht (AVR, PIC, ...) Welcher> Compiler in welcher Version (Z.B WINAVR 17032007, BASCOM-AVR 1.4; nicht:> "neueste Version"!) Das Problem in Zahlen fassen! Nicht einfach> schreiben "so schnell wie möglich", "so stromsparend wie möglich" etc,> sondern mal ein paar Zahlen nennen. X MHz, Y ms, Z µA etc. Wenn man> keine exakte Vorstellung davon hat, sollte wenigstens eine Größenordnung> angegeben werden (1..5 MHz, <1mA etc.) Welcher IC in welchem Gehäuse.> Wenn Datenblätter vorhanden sind diese ggf. anhängen oder als Link> angeben. Daran denken, dass die Leute im Forum nicht neben einem sitzen> und alles so vor sich sehen wie der Fragesteller Klare Fragen> formulieren und nicht davon ausgehen, dass eine diffuse> Zustandsbeschreibung als Frage interpretiert wird.>> denke mal drüber nach.
Da man mir ja hier auf anhieb helfen konnte denke ich habe ich alles
gesagt zu meinem Problem was zu sagen war. Wo bitte habe ich was
weggelassen was man hätte benötigt um das problem besser zu lösen.
Lerne bitte jemand richtig essen der kleckert und das im normalen Ton
und nicht mit einer verarsche das jemand her geht und seine
Programmzeilen abzählt und sich gedanken macht über die Antwort.
Alter Fux schrieb:> Alter Fux schrieb:>>> Sorry sollte ich jetzt einwenig hart sein. A......>>>> etwa hier?
Das war ja wohl lange nach deiner Verarsche und nicht der Grund deiner
Verarschung.
Jungs beruhigt euch
Wenn er im Eröffnungsposting noch die Zeile 153 aus der Fehlermeldung
markiert hätte, wäre es eine perfekte Frage gewesen. 10 Punkte von 10
möglichen.
Aber auch so war offensichtlich und gut erkennbar, was das Problem
darstellt.
Im Vergleich, wie andere Fragen hier manchmal aussehen, ist das hier
harmlos und schon fast vorbildlich.
Karl heinz Buchegger schrieb:> Jungs beruhigt euch>>>> Wenn er im Eröffnungsposting noch die Zeile 153 aus der Fehlermeldung>> markiert hätte, wäre es eine perfekte Frage gewesen. 10 Punkte von 10>> möglichen.>> Aber auch so war offensichtlich und gut erkennbar, was das Problem>> darstellt.>>>> Im Vergleich, wie andere Fragen hier manchmal aussehen, ist das hier>> harmlos und schon fast vorbildlich.
Danke und es zeigt mir auf das es sich doch eventuell lohnt sich hier
anzumelden.
Eine Entschuldigung und die Einsicht wäre auch ok gewesen und ich hätte
mich nicht so aufgeregt. Ich kann es halt nicht leiden mich hin zu
setzen und zu denke das mir einer helfen möchte und nach 5 Minuten zu
merken das ich GRUNDLOS verarscht wurde und die Zeit dahin ist.
; wenn der ADC fertig ist, wird dieses Bit gelöscht
33
lds Temp1,ADCSRA
34
sbrs Temp1,ADSC
35
rjmp wait_adc
36
37
38
; Cursor auf die 5 Stelle in Zeile 4 setzen
39
ldi Temp1, 0b11011000
40
rcall lcd_command
41
42
; ADC einlesen:
43
ldi xl, ADCL ; immer zuerst LOW Byte lesen
44
ldi xh, ADCH ; danach das mittlerweile gesperrte High Byte
45
46
rcall lcd_number_big
47
48
49
rjmp loop
lcd_number_big ist eine Routine die mir auf dem Display die Zahl
darstellt die in xh und xl steht. Die Routine geht auch. Ich bekomme
aber immer den gleichen Wert angezeigt obwohl ich PC0 (ADC0) mit GND
verbunden habe.
Sinn der Übung ist es mich in den ADC einzuarbeiten und ich wollte gerne
mal die Werte sehen.
Habe ich was vergessen was zur lösung des Problemes führen kann?
Bei Verbindung GND zum abgefragten Eingangspin des ADC sollte ein
gleichbleibender Wert (um die 0 :-) rauskommen. Was anderes wäre
komisch.
Um eine Spannung zu messen, müsstest du auch eine Spannung auf den
betreffenden ADC-Pin geben z.B. mit einem Potentiometer wie in
AVR-Tutorial: ADC: Beschaltung des ADC-Eingangs
Stefan B. schrieb:> Bei Verbindung GND zum abgefragten Eingangspin des ADC sollte ein Wert>> um die 0 rauskommen. Was anderes wäre komisch :-)
Ja und weil es komisch ist das ich 31096 herraus bekomme suche ich
gerade nache dem Fehler den ich gemacht habe.
Neuling schrieb:> Ja und weil es komisch ist das ich 31096 herraus bekomme suche ich> gerade nache dem Fehler den ich gemacht habe.
Ah sorry, ich dachte du gehst nach Code im Tutorial vor.
Hi
>ldi Dummy1, (1<<REFS0) ; Kanal 0, interne Referenzspannung 5V>sts ADMUX, Temp1
Fällt dir etwas auf?
Ich weiss schon, warum ich dieses .def-Geraffel nicht benutze.
MfG Spess
stehen das mit dem Dummy1 habe ich hier aus einem anderen Thread
übernommen war aber nicht richtig nur noch bei mir in der
Zwischenablage. In meinem Programm ist es Temp1
Müsste es hier
wait_adc:
; wenn der ADC fertig ist, wird dieses Bit gelöscht
lds Temp1,ADCSRA
sbrs Temp1,ADSC
rjmp wait_adc
nicht SBRC anstelle von SBRS heißen?
spess53 schrieb:> Hi>>> sbrs Temp1,ADSC <----->> rjmp wait_adc>> sbrc Temp1,ADSC <-----> rjmp wait_adc>> ADSC ist während der Wandlung H.
Hab ich mir auch überlegt. Allerdings müsste irgendwann das ADC Ergebnis
auch so fertig werden und korrekt sein. D.h. seine hohen Zahlen erklärt
das nicht, weil er ja in einer Schleife läuft.
Die sind überhaupt seltsam. Ich wüsste nicht, wie es zu einem
Messergebnis von 31096 kommen kann. Von daher tendiere ich sogar eher zu
einem Fehler in den Ausgabefunktionen.
Hi
>Allerdings müsste irgendwann das ADC Ergebnis>auch so fertig werden und korrekt sein.
Nein. Das Ende der Wandlung wird überhaupt nicht abgewartet.
>Ich wüsste nicht, wie es zu einem>Messergebnis von 31096 kommen kann. Von daher tendiere ich sogar eher zu>einem Fehler in den Ausgabefunktionen.
Der Wert kann nicht >1023 werden.
MfG Spess
ldi xh, 1 ; danach das mittlerweile gesperrte High Byte
4
5
rcall lcd_number_big
6
7
8
rjmp loop
wird richtig 00511 auf dem Display angezeigt.
Ein xl mit 255 und ein xh 255 zeigt auch 65535 an also auch OK
Ein xl mit 0 und ein xh mit 0 liefert mir 00000 wie es sich gehört.
So glaube ich nicht das es an der ausgabenroutine liegt.
Diese sieht so aus ( angelhnt aus dem Tutorial )
1
; Eine Zahl aus dem Register xh(high) und xl(low) dezimal ausgeben
2
3
lcd_number_big:
4
push xl
5
push xh
6
7
; Division durch mehrfache Subtraktion
8
9
ldi Temp1,'0'-1 ; Ziffernzähler direkt als ASCII Code
rcall StartDisplay ; Startbildschirm aufbauen und Display Init
96
97
98
;Alle Interrups an
99
sei
100
101
102
103
; neuen ADC-Wert lesen
104
loop:
105
; den ADC starten
106
lds Temp1,ADCSRA
107
sbr Temp1,1<<ADSC
108
sts ADCSRA, Temp1
109
110
111
wait_adc:
112
; wenn der ADC fertig ist, wird dieses Bit gelöscht
113
lds Temp1,ADCSRA
114
sbrs Temp1,ADSC
115
rjmp wait_adc
116
117
118
; Cursor auf die 5 Stelle in Zeile 4 setzen
119
ldi Temp1, 0b11011000
120
rcall lcd_command
121
122
; ADC einlesen:
123
ldi xl, ADCL ; immer zuerst LOW Byte lesen
124
ldi xh, ADCH ; danach das mittlerweile gesperrte High Byte
125
126
rcall lcd_number_big
127
128
129
rjmp loop
130
131
132
.include "lcd-routines.asm" ; LCD Funktionen
133
.include "ton.asm" ; Ton Funktionen
134
.include "rs232.asm" ; RS232 Funktionen
135
.include "StartDisplay.asm" ; Display Funktionen
Das ganze geht schon fein und das gerüsst benutze ich zum lernen immer.
Nur den Teil zwischen Loop benutze ich um weiter zu lernen und neue
Funktionen zu erkunden.
spess53 schrieb:> Hi>>>Allerdings müsste irgendwann das ADC Ergebnis>>auch so fertig werden und korrekt sein.>> Nein. Das Ende der Wandlung wird überhaupt nicht abgewartet.
Schon.
Aber im nächsten Schleifendurchlauf ist es dann in den ADC Registern
vorliegend und er würde es sich holen, während der ADC schon wieder
arbeitet. Ich weiß allerdings nicht auswendig ob es zulässig ist,
während der Wandlung auf ADCH/ADCL zuzugreifen. Muss es aber wohl, sonst
würde der Free-Running Mode keinen Sinn ergeben.
Ähm,
ldi xl, ADCL ; immer zuerst LOW Byte lesen
ldi xh, ADCH ; danach das mittlerweile gesperrte High Byte
LDI ist hier der falsche Befehl. Du lädst die Adressen von ADCL und ADCH
und gibst sie aus.
Das müssen IMHO LDS sein.
(Und natürlich SBRC anstelle von SBSR. Aber das hatten wir schon)
Neuling schrieb:> Eine Entschuldigung und die Einsicht wäre auch ok gewesen und ich hätte>> mich nicht so aufgeregt. Ich kann es halt nicht leiden mich hin zu>> setzen und zu denke das mir einer helfen möchte und nach 5 Minuten zu>> merken das ich GRUNDLOS verarscht wurde und die Zeit dahin ist.
Wenn man "42" liest und das irgendwas mit Software zu tun hat, dann wird
man nicht verarscht.
42 ist die Antwort auf die Frage nach dem Leben, dem Universum und dem
ganzen Rest.
Dafür hat der leistungsstärkste Computer seiner Zeit 7,5 Millionen Jahre
gebraucht, um das auszurechen. Die Antwort ist natürlich völlig
unbefriedigend. Aber die Frage war auch falsch.
Daraufhin wurde ein neuer noch leistungsfähigerer Computer, dessen
Hauptbestandteil die Erde war, gebaut, um die Frage auf die Antwort 42
zu finden.
Leider wurde die Erde von einem Vogonenabrisskommando, fünf Minuten
bevor die Berechnung fertig war, zerstört, um einer hypergalaktischen
Umgehungsstrasse Platz zu machen.
42 findet seither in der Software Verwendung als eine Zahl ohne
Bedeutung.
Das wirst du in diversen Beispielen in diversen Büchern finden.
Bitte zehn Informatiker, dir irgendeine Zahl zu nennen und du wirst
mindestens 7 Mal die Zahl 42 als Antwort bekommen.
Wenn du sowas liest: "kommentierer Zeile 42 aus!",
ist das fast dasselbe wie "????????????????????????".
Will heissen, ich kann mit deiner Frage so nichts anfangen.
Softwareentwickler haben alle irgendwie einen Knall.
Das zur Netiquette und zur Zahl 42.
Nachzulesen in Douglas Adams, Per Anhalter durch die Galaxis.
Und immer ein Handtuch dabei haben...
mfg.
Neuling schrieb:>> warum nicht 1023? aber das ist wohl eine andere geschichte
Referenzspannung nicht ganz exakt. Irgendwo ein kleiner
Übergangswiderstand. Poti (zum Spannungseinstellen) geht der Schleifer
nicht ganz bis ans Ende, etc. etc.
Thomas Eckmann schrieb:> Nachzulesen in Douglas Adams, Per Anhalter durch die Galaxis.
Sorry das ich das Buch nicht gelesen habe. Wusste nicht das ich das für
das Programmieren benötige. Steht hier auch in keinem Tutorial und wie
mein Name schon sagt ich bin Neuling und beschäftige mich erst so seit
einem Monat mit der sache. Vorab noch nie etwas Programmiert.
Ein Freund und ich machen das aus dem Spaß herraus wer weiter kommt.
Idee hatten wir dazu aus der Schule bekommen. Und auch da hatte wir noch
nie etwas mit 42 im Sinn.
lach
Ich merke ich darf Dir keine Tipps geben wo du weiter suchen kannst. Ich
war zuerst hier grins
Leutz immer langsam wir machen das zum Spaß und ich selber finde das
Forum echt klasse. Ok sein begrüßung war für sein erstes fragen nicht
gerade fein.
Ach ja Das mit Dummy1, hättest du Micha nicht schreiben solle. Die regel
sagt aus keiner schaut vom anderen ab.
wie in meinem Blog unter Beitrag "Viele Fragen und ein kleiner Blog"
zu sehen ist ist das meine Variable lach
Ach ja wir sind 16 und er ist echt total neu bei der Sache. Also hoho
Brauner.
Neuling schrieb:> Thomas Eckmann schrieb:>> Nachzulesen in Douglas Adams, Per Anhalter durch die Galaxis.>> Sorry das ich das Buch nicht gelesen habe.
Nicht dass es jetzt in diesem Zusammenhang wichtig wäre.
Wenn du Freude an verschrobenem englischen Humor im Bereich Science
Fiction hast, dann lies es! Eine unbedingte 5-Sterne Empfehlung.
(Der Anhalter ist seit vielen Jahren so was wie ein 'running Gag' in der
Software-Szene. Du wirst auch heute noch immer wieder auf viele Zitate
daraus stossen, die man nicht verstehen kann, wenn man das Buch (und die
restlichen 4 Teile der Trilogie) nie gelesen hat.)