Assembler für Assembler - Anfänger (bin selber noch einer)

Hallo LotadaC,
durch Dich rutsche ich immer mehr in die Programmtiefe hinein.
Meinen Dank für Deine ausführliche Doku.
Zur Zeit von Bascom habe ich mich garnicht um das Register SREG gekümmert,
ja da wußte ich nicht mal, daß es sowas giebt.

Nun steht das Programm für den Kran und ich muß es noch testen.

Denke nicht gleich "er hört ja doch nicht auf mich"!

Eine große Hilfe wäre es für mich, wenn Du mir ein stückel Quellcode über Deine Idee
rüber schieben könntest. (Z.B. Warteschlange o. ISR)

Nun sagt nicht das Programm wäre nicht übersichtlich durch die vielen RCALL......

Code:
; Projekt-Name: Projekt01                      Datum: 22.09.2012									

; Datei: KRAN01.asm              

; Hardware-Inputs:
; PD2,Pin6 = Endlinks über J1/16
; PD3,Pin7 = Endrechts über J1/17
; PD4,Pin8 = Taste Start über J1/14
; PD5,Pin9 = Lichtschranke über J1/15

; PA2,Pin1 = Reset

; Hardare-Outputs:
; PB0,Pin12 = Aufbegin/Auflast über J2/2
; PB1,Pin13 = Abwaerts über J2/3
; PB2,Pin14 = Linkslauf über J2/4
; PB3,Pin15 = Rechtslauf über J2/5
; PB4,Pin16 = Magnet EIN/AUS über J2/6
; PB5,Pin17 = LED (leuchtet nach Start)
 
; AVR: Tiny2313-20PU

.INCLUDE   "tn2313def.inc"   
           
 rjmp    reset          ; Reseteinsprung
 .ORG    OVF0addr       ; Interrupt-Vektor
 rjmp    TIMER0_OVF     ; Sprung zur ISR

reset:    

 .def   accu0 = r16
 .def   accu1 = r17

 ldi     accu0,0xFF       ; 0b1111.1111
 out     DDRB,accu0       ; Datenricht. PB0-PB7=Output
 clr     accu0            ; alle Bits = LOW                
 out     DDRD,accu0       ; Datenricht. PD0 - PD6=Input
 ldi     accu0, 0xFF      ; 0b111.1111
 out     PORTD,accu0      ; PD0 bis PD6=Pullup

; Timer0 initialisieren:
 ldi     accu0,(1<<CS02)|(1<<CS00) ; Prescale = 1024 
 out     TCCR0B,accu0
 ldi     accu0,1<<TOIE0   ; Timer Overflow Interrupt einrichten
 out     TIMSK,accu0
 sei                      ; Timer frei

 
 loop:
 sbi     PORTB,5      ; LED = AUS
 
 Start:               ; drücke Taste Start
 sbic    PIND,PD4     ;überspringe,wenn PD4=LOW
 rjmp    Start

 rcall   Aufbegin     ; d1=EIN / AUS
 rcall   zeit2

 rcall   Linkslauf    ; d3=EIN / AUS
 rcall   zeit2

 rcall   Abwaerts     ; d2=EIN / AUS
 rcall   zeit2

 rcall   Magnetein    ; d5=EIN
 rcall   zeit2

 rcall   Auflast      ; d1=EIN / AUS
 rcall   zeit2

 rcall   Rechtslauf   ; d4=EIN / AUS
 rcall   zeit2

 rcall   Ablegen      ; d2=EIN / AUS
 rcall   zeit2

 rcall   Magnetaus    ; d5=AUS
 rcall   zeit2

 rcall   Endlage      ; d1+d3=EIN / AUS
         
 rjmp     loop

Aufbegin:
 cbi     PORTB,5      ; LED = EIN
 sbi     PORTB,0      ; d1 = EIN
 rcall   zeit8        ; Zeit ca. 8Sec.
 cbi     PORTB,0      ; d1 = AUS
 ret

Linkslauf:
 sbi     PORTB,2      ; d3 = EIN
 gehelinks:
 sbic    PIND,PD2     ; überspringe, wenn Endlinks=0
 rjmp    gehelinks
 cbi     PORTB,2      ; d3 = AUS
 ret

Abwaerts:
 sbi     PORTB,1      ; d2 = EIN
 geheabw:
 sbic    PIND,PD5     ; überspringe, wenn Lichtschr.=0
 rjmp    geheabw
 cbi     PORTB,1      ; d2 = AUS
 ret 

Magnetein:
 sbi     PORTB,4      ; d5 = EIN
 ret

Auflast:
 sbi     PORTB,0      ; d1 = EIN
 rcall   zeit8        ; Zeit ca. 8Sec.
 cbi     PORTB,0      ; d1 = AUS
 ret

Rechtslauf:
 sbi     PORTB,3      ; d4 = EIN
 geherechts:
 sbic    PIND,PD3     ; überspringe, wenn Endrechts=0
 rjmp    geherechts
 cbi     PORTB,3      ; d4 = AUS
 ret

Ablegen:
 sbi     PORTB,1      ; d2 = EIN
 rcall   zeit8        ; Zeit ca. 8Sec.
 cbi     PORTB,1      ; d2 = AUS
 ret

Magnetaus:
 cbi     PORTB,4      ; d5 = AUS
 ret

Endlage:
 sbi     PORTB,0      ; d1 = EIN (Aufwaerts)
 sbi     PORTB,2      ; d3 = EIN (Linkslauf)
 rcall   zeit4
 cbi     PORTB,0      ; d1 = AUS
 cbi     PORTB,2      ; d3 = AUS
 ret

;Zeitvorgaben
zeit2:
 ldi     accu1,0x06   ;0b0000.0110
  pause2:
 tst     accu1        ;teste r17 auf Low
 brne    pause2
 ret

zeit4:
 ldi     accu1,0x1A   ;0b0001.1010
  pause4:
 tst     accu1        ;teste r17 auf Low
 brne    pause4
 ret

zeit8:
 ldi     accu1,0x24   ;0b0010.0100
  pause8:
 tst     accu1        ;teste r17 auf Low
 brne    pause8
 ret
 
;Interrupt-ISR
TIMER0_OVF:push    r2        ;Kopie r2 auf den Stack, danach SP-1
           in      r2,SREG   ;Inhalt vom Statusregister in r2 laden
           dec     accu1     ;ISR Abarbeitung (dec  r17)
           out     SREG,r2   ;Inhalt von r2 ins SREG laden
           pop     r2        ;SP+1, danach vom Stack in r2 laden
           reti
 
...Zur Zeit von Bascom habe ich mich garnicht um das Register SREG gekümmert,
ja da wußte ich nicht mal, daß es sowas giebt...
Bascom ist ja auch 'ne Hochsprache, und damit dazu da, Dir den ganzen Hardware-nahen Kram abzunehmen - andererseits kommt es durch die geforderte Vielseitigkeit der Hochsprachenbefehle manchmal zu Kompromissen (die man vielleicht in einem konkreten Fall nicht haben will, und in ASM vermeiden würde). Und im allgemeinen weiß man gar nicht, was durch eine simple Hochspracheninstruktion alles mit eingebaut wird (Zeit- und Flashbedarf), insbesondere wenn es sich um Software-Realisierungen irgendwelcher Schnittstellen etc handelt.
...Denke nicht gleich "er hört ja doch nicht auf mich"!...
Hey, es IST Dein Programm...;)
Habs mal kurz überflogen:
-Du hast das in "quote-tags" eingeschlossen, Du wolltest stattdessen sicher "code-tags" verwenden, oder?! Dann tauchen da auch nicht diese komischen smileys auf...
-irgendwo kannst Du im Studio auch die Anzeige von Zeilennummern einschalten - das würde das Bezugnehmen hier vereinfachen.
-vor der Sprunganweisung beim Resetvektor hätte ich noch ein .org 0x0000 gesetzt, spielt aber eigentlich keine Rolle, da der folgende Sprungbefehl die erste zu übersetzende Instruktion ist. das .org selbst erzeugt als Assemblerdirektive keinen code.
In dem Zusammenhang muß Dir auch klar sein, daß das Laden von 255dez nach accu0 (also Dein reset-label) direkt hinter den TOV0-Sprungbefehl ins Flash geschrieben wird. Da würde sich der USART0-RX-Complete-IRQ-Einsprungpunkt befinden. Wenn Du dessen ISR-Sprung also (mittels entsprechender .org-direktive VOR der des TOV eingetragen hättest (was bisher durchaus korrekt übersetzt worden wäre), würde JETZT Dein LDI... den USART-Sprung überschreiben. Wenn man also Programmcode (warum auch immer) bereits in der IVT (also in nicht verwendeten Einsprungadressen) unterbringen will, muß man das beachten. Hinter dem TOV0 kommen bei diesem Tiny noch 12 weitere IRQ-Einsprungpunkte, die man nutzen kann.
Sicher ist man, wenn man die Vektoren komplett in Ruhe läßt, und das eigenliche Programm (also Deinen Reset-Label) hinter die IVT schreibt. Und wo ist das genau? Naja, der erste ist der Reset-Vektor, welcher bei =0x0000 liegt. Danach kommen Controllerabhängig-viele andere. Wieviele das (inclusive Reset) sind, gibt die (in der inkludierten Prozessordefinitionssdatei definierte) Konstante "INT_VECTORS_SIZE" an. Wenn man also vor dem Einsprunglabel ".org INT_VECTORS_SIZE" schreibt, landet der nächste übersetzte Befehl sicher in der ersten Flash-Adresse hinter den IVT - egal, was man da oben noch so alles anstellt. Damit "verschenkst" Du nutzbaren Flash-Speicher - ob Du hier allerdings so knausern mußt,...
(so könntest(!) Du zB die TOV0-ISR direkt in die IVT schreiben, über die folgenden Flash-Adressen bis hin zum PCINT (0x000B) - diese IRQs wären dann natürlich nicht nutzbar, klar. Aber ich denke, derart mußt Du nicht knausern...)
-kannst ja mal die, beim/nach dem Assemblieren angegebene prozentuale/absolute Flashnutzung mitangeben - viel isses sicher nicht.
...Eine große Hilfe wäre es für mich, wenn Du mir ein stückel Quellcode über Deine Idee
rüber schieben könntest. (Z.B. Warteschlange o. ISR)...
Hab ich mal sowas angedeutet? ... naja, kann mir ja mal'n Kopf machen, wie ich das angehen würde.
... Nun sagt nicht das Programm wäre nicht übersichtlich durch die vielen RCALL......
: DaumenHoch:
 
dankeschön....das kommt davon, wenn man als Rentner schnell mal den
Quadrocopter beiseite legt, um eben noch zu antworten.
Man hat einfach zu viel um die Ohren. Aber lieber so als nur jeden Tag mit
den Hund Gassi gehen.

Grüße

Rolf
 
Der Nachteil vom code-tag-Block ist lediglich, daß dann die Gleichzeitig sichtbare Codemenge beschränkt wird. Grad bei ASM finde ich das vorhandene "Fenster" etwas klein (kurz). Klar, wenn die Programme länger werden, werden damit die Beiträge schwerer lesbar - irgendwo gabs doch auch mal die Möglichkeit, Code-Fenster während der Anzeige "auszuklappen" etc...
(Nebenbei gesagt kommt hier noch die Beschränkung der Gesamtbreite (durch die, durchaus verständliche Werbung an der rechten Seite hinzu). Rechts die Werbung, links die Userinfos etc ... da bleibt auf kleinen Bildschirmen nicht viel Platz. Lässt sich das nicht irgendwie Verbessern? Werbung unter die Userinfos?)
 
Hallo LotadaC,

nach geringen Korrekturen der ablaufenden Zeiten läuft der Kran.

Was mir aber beim ersten Anlegen der Versorgung auffiel:

Alle Relais wurden von PortB über einen ULN2003 sofort eingeschaltet.
Schnell habe ich die Versorgung wieder entfernt.

Der Code sah nach der Initialis. so aus:

loop:

Start: sbic PIND,PD4
rjmp Start

;und jetzt kam der Ablauf

ich habe nach loop: das PortB erstmal

clr accu0 ; lösche alle Bits von r16

out PORTB,accu0

Und damit blieben alle Relais in Ruhe, bis die Starttaste gedrückt wurde.

Zum Schluß noch eine Frage.

Ich sehe oft bei Anderen z.B.

sbi PORTB,5 ;Bit 5 auf High gesetzt.

sbi PORTB,PB5 ;ist das korrekter?

So langsam schnalle ich das jetzt mit den SREG-Register
z.B.

Sec6: ;wenn ich 6Sec, meckert der Assembler!
ldi r17,0x1C ;dezimal=28 (0,22x28 = ca. 6 Sec.)
pause6:
tst r17 ;tst manipuliert das Z-Flag, wenn r17=LOW hat Z=1
brne pause6 ;Verzweigung nach pause6, wenn Z=0
ret

lieg ich so richtig?

Grüße

Rolf
 
Hi Rolf,

Ich sehe oft bei Anderen z.B.

sbi PORTB,5 ;Bit 5 auf High gesetzt.

sbi PORTB,PB5 ;ist das korrekter?
Das erste sagt direkt das Bit5 gesetzt werden soll.

Beim zweiten wird eine Definition aus der Include-Datei für den gewählten Mikrocontroller genommen. Da ist lediglich definiert das der Name PB5 eine 5 enthält.

Die zweite Version ist etwas lesbarer und an zentraler Stelle schneller änderbar. Mehr aber auch nicht. Bei entsprechenden Kommentaren ist aber die erste Version auch gut lesbar. Ist Geschmackssache :D

Gruß
Dino
 
clockint3 von LotadaC

melde mich wieder einmal!

Code:
; vom 02.08.2012 nach Blockschema 
; "clockint3" von LotadaC

; AVR: Tiny2313 -PU
           .INCLUDE   "tn2313def.inc"   
           
           .def    akku=r16
           .def    temp1=r17
            
           rjmp    reset           ; Reseteinsprung
           .ORG    OVF0addr        ; Interrupt-Vektor
           rjmp    TIMER0_OVF      ; Sprung zur ISR

reset:     ldi     akku,(1<<PB2)|(1<<PB1)|(1<<PB0)
                         ;oder ldi   akku,0x07  
           out     DDRB,akku ;Datenricht. PB0-PB2=Outp.
           
; Timer0 initialisieren:
           ldi     akku,(1<<CS02)|(1<<CS00);Pr.= 1024
           out     TCCR0B,akku
           ldi     akku,(1<<TOIE0);Register TIMSK (Bit1=1)
           out     TIMSK,akku
           sei                   ;Timer frei

      
           ldi     temp1,92      ;lade r17 mit 92 (dez.)     
           clr     akku      
           out     PORTB,akku    ;PB0 - PB2 = LOW
           
loop:      cpi     temp1,69      ;wenn temp1 größer 69..C=0
           brcs    gehe01        ;dann keine Verzweigung gehe01
           ldi     akku,0x07
           out     PORTB,akku    ;PB2-PB0 = 1
           rjmp    Ende

gehe01:    cpi     temp1,46      ;wenn temp1 größer 46..C=0
           brcs    gehe02        ;dann keine Verzweigung gehe02
           cbi     PORTB,PB2     ;PB1-PB0 = 1
           rjmp    Ende   

gehe02:    cpi     temp1,23      ;wenn temp1 größer 23..C=0
           brcs    gehe03        ;dann keine Verzweigung gehe03
           cbi     PORTB,PB1     ;PB0 = 1
           rjmp    Ende         

gehe03:    cpi     temp1,0      ;wenn temp1 größer 0..C=0
           brcs    Ende         ;dann keine Verzweigung Ende
           cbi     PORTB,PB0     ;PB2-PB0 = 0
                   
Ende:      rjmp    loop
                   

;Interrupt-ISR

TIMER0_OVF:push    r2        ;Kopie r2 auf den Stack, danach SP-1
           in      r2,SREG   ;Inhalt vom Statusregister in r2 laden
           dec     temp1     ;Dekrement (r17-1)
          
           out     SREG,r2   ;Inhalt von r2 ins SREG laden
           pop     r2        ;SP+1, danach vom Stack in r2 laden
           reti
          .EXIT


mh...ich versuche das Blockschema "clockint3" einzufügen.
Es war vom 02.08.2012 von LotadaC, gelingt mir aber nicht!

Grüße

Rolf
 
es ist eine Datei clockint3.png die im Thread "Tiny2313 und Timer0 auf Seite2 steckt.
LotadaC weiß bestimmt wie man diese hierher holt. Unter Anhänge klappt es auch nicht.

Erstellt am 02.08.2012
 
Sind ja auch meine Anhänge :p...
Aber Du könntest die verlinken...
Rolf meint dieses Bild (aus diesem Beitrag):
attachment.php

Wie Du ja selbst erkannt haben wirst, geht das so wie in der Grafik nicht (ganz) - die unteren beiden Vergleiche werden nie erreicht, da sie bereits mit dem davor erschlagen werden. Man muß entweder die Reihenfolge der (letzten 3) Abfragen umkehren, oder (so wie bei Dir) "ja" und "nein" vertauschen, wobei die auszuführenden Aktionen alle eins runterrutschen (der erste Fall ist damit weg, unten kommt Dein Vergleich mit 0 (*)dazu).
Meine Kommentare:
-vor dem ersten Durchlauf initialisierst Du Deinen ZeitZähler (Temp1) auf 92 (4*23) - nach dem ersten Durchlauf machst Du mit 255 weiter, dann dauert der Zustand "alle 3 Bits an" also jeweils deutlich länger. Um das zu korrigieren...
-in der ISR nach dem decrement Abhängig vom Z-Flag (oder statt Decrement SUBI, und dann das Carry-Flag) Temp1 reinitialisieren. Dann kannst Du auch gleich hier den ersten Fall behandeln, also die 3 Bits setzen. Damit würde der erste Vergleich wegfallen.
-Der letzte Vergleich ist sinnlos(*) - 0 kann nie größer als irgendeine (positive) Zahl werden. Das Carry wird also nie gesetzt. BRCS springt nie. Am Label kann also sofort das CBI kommen.
-in der ISR sicherst Du das SREG in R2. Dazu sicherst Du R2 auf den Stack. Soweit ist das i.O. Da Du aber R2 nie verwendest, könntest(!) Du Dir das auch sparen, klar?
-wenn Du oben bei Deiner Benamsung der verwendeten Register mit ".def zeitkonst=23" 'ne Konstante definierst, kannst Du die 92 durch 4*Zeitkonst, die 69 durch 3*Zeitkonst, die 46 durch 2*Zeitkonst, und die 23 durch Zeitkonst ersetzen. Wenn das Gesamttiming später angepaßt werden soll, brauchst Du bloß noch "an der Konstante drehen", klar?
 
Sind ja auch meine Anhänge :p...
Aber Du könntest die verlinken...
Rolf meint dieses Bild (aus diesem Beitrag):
attachment.php

-Der letzte Vergleich ist sinnlos(*) - 0 kann nie größer als irgendeine (positive) Zahl werden. Das Carry wird also nie gesetzt. BRCS springt nie. Am Label kann also sofort das CBI kommen.
?

Hallo LotadaC,
ich habe heute Nacht nicht gut geschlafen, da ich oft über das Forum "avr-praxis" nachgedacht habe.
Aber erst mal zum fachlichen.
Ich habe den Code mehrere Mal über den Debugger laufen lassen, das Status-Register immer im
Auge gehabt...wie verhält sich Zero und Carry.
Nur so habe ich das Register immer mehr im Griff bekommen.
Du schreibst BRCS springt nie.
Als temp1 noch den Wert01 hatte (cpi temp1,0) hatte C =0
Erst nach den nächsten Überlauf hatte temp1 =00 und siehe da..C hatte 1 und der Sprung
nach Ende wurde ausgeführt.
Die Aufgabe war ja, daß 3 Leds an Pin0 bis2 im 5 Sek. Takt dunkel werden.

Und jetzt was privates was auch oldmax und andere lesen können.
Ich weis nicht recht, wie ich anfangen soll, aber ich versuchs mal.
Im Sommer 2012 trat ich zu dem Forum hinzu.
Was mir sehr gefiel war hier der Ton bzw. erst mal das Vorstellen und die promte Antwort
auf Fragen. Da war ich von anderen Foren eine harte Gangart gewohnt.
Tauchte von mir ne blöde Frage auf, wurde mir gleich empfohlen mich als Schuster
zu bewerben. Einer schrieb mir mal, ich solle den Schuster nicht so ernst nehmen, er würde
nur lesen und Wichtiges für sich verarbeiten.
Ich finde allerdings, von so einer Einstellung kann ein Forum nicht leben und geht kapput.
Leben kommt erst durch bessere Ideen und sein Wissen anderen mitzuteilen.
Was mir aber sehr an die Nieren ging war das mit Severin.
Oldmax schrieb dann noch zum Schluß "Rolf.H = Severin" und dann war Sendepause!
Bis heute habe ich mir Gedanken gemacht warum er nie mehr geantwortet hat.
Inner lich dachte ich jetzt giebt man mir die Schuld.
Ich hatte mich in seinen Thread eingeklingt und Kommentare an seinen Quelltext gehangen.
Dabei ist mir noch ein Fehler passiert, für den ich mich entschuldigt habe.
Könnte mich heute noch Ohrfeigen.
D.h. ich hatte mich im Forum abgemeldet und den Namen avr-praxis aus den Favoriten
gelöscht. Ich wurde das Gefühl nicht los "da meldet sich sowieso keiner mehr.
Umso größer war meine Überraschung am gestrigen Tag.
Wenn Euch an mir was absolut nicht gefällt dann her damit.
Meine Threads sollten eigentlich nicht nur Fragen stellen, sondern Andere zum
Mitdenken bewegen.
Grüße erst mal

Rolf
 
Das mit dem Carry nach dem CPI verstehe ich nicht:
Code:
; vom 02.08.2012 nach Blockschema 
; "clockint3" von LotadaC
...
gehe03:    cpi     temp1,0      ;wenn temp1 größer 0..C=0
           brcs    Ende         ;dann keine Verzweigung Ende
           cbi     PORTB,PB0     ;PB2-PB0 = 0
...
...
AVR-Instruction Set zu CPI und Carry Flag (S.63) schrieb:
C: Rd7 •K7 +K7 •R7+ R7 •Rd7
Set if the absolute value of K is larger than the absolute value of Rd; cleared otherwise.
Ok, K=0 also auch der absolute Betrag=0. Im Register temp1 kann also stehen was will - 0 wird nie größer sein (höchstens gleich groß). Folglich ist C also immer "cleared otherwise". Folglich wird der Sprung nach Ende nie ausgeführt, sondern immer PORTB2..PORTB0 gelöscht.

Oder hab ich da was falsch verstanden? Du scheinst es ja im Simulator verfolgt zu haben - hab' ich da jetzt was falsch übersetzt? Oder stimmt das Instruction-Set nicht?

Jetzt mal was zu der anderen Sache:
Das mit den flotten Antworten ist hier so eine Sache - mal geht es schnell, mal dauert es länger (manchmal auch gar nichts)...
Es gibt hier einen "harten Kern" von vielleicht 20 Leuten (Zahl mal einfach aus der Luft gegriffen), die hier mehr oder weniger oft was schreiben. Ob diese Dir dann zu 'ner konkreten Frage helfen können, ist dann auch noch die Frage. Jedenfalls hat dieser Kern ja auch noch anderes zu tun... ich zB hatte letzte Woche Spätschicht (da gehe ich gegen 8:00 aus dem Haus, und komme gegen 22:30 Heim (so die Bahn will)), und Wochenenddienst. Da bleibt dann neben der Familie nicht viel Zeit fürs Hobby.
Der Großteil der User, die sich angemeldet hatten sind "Relikte", die mal kurz irgend`ne Frage/ein Problem gelöst bekommen haben wollten (oft in Verbindung mit Schule/Ausbildung etc..), und sich dann nach mehr oder weniger Eigeninitiative/Hilfe und mehr oder weniger Erfolgreicher Lösungsfindung auch nur noch mehr oder weinger oft gemeldet haben. Wobei "weniger" deutlich überwiegt.
Das soll jetzt nicht falsch verstanden werden - Hilfestellung gibts hier eigentlich (fast) immer - schwierig wird's nur, wenn die Lösung "schon gestern" da sein soll, oder die Frage/das Problem so oberflächlich gestellt ist, daß man sie als außenstehender nicht versteht/interpretieren kann.
 
Um das zu korrigieren...
-in der ISR nach dem decrement Abhängig vom Z-Flag (oder statt Decrement SUBI, und dann das Carry-Flag) Temp1 reinitialisieren. Dann kannst Du auch gleich hier den ersten Fall behandeln, also die 3 Bits setzen. Damit würde der erste Vergleich wegfallen.
-Der letzte Vergleich ist sinnlos(*) - 0 kann nie größer als irgendeine (positive) Zahl werden. Das Carry wird also nie gesetzt. BRCS springt nie. Am Label kann also sofort das CBI kommen.
-in der ISR sicherst Du das SREG in R2. Dazu sicherst Du R2 auf den Stack. Soweit ist das i.O. Da Du aber R2 nie verwendest, könntest(!) Du Dir das auch sparen, klar?
-wenn Du oben bei Deiner Benamsung der verwendeten Register mit ".def zeitkonst=23" 'ne Konstante definierst, kannst Du die 92 durch 4*Zeitkonst, die 69 durch 3*Zeitkonst, die 46 durch 2*Zeitkonst, und die 23 durch Zeitkonst ersetzen. Wenn das Gesamttiming später angepaßt werden soll, brauchst Du bloß noch "an der Konstante drehen", klar?

Hallo LotadaC,
danke für Deine Zeilen.
Habe mir das ausgedruckt und werde das in der ISR nochmal geistig verarbeiten.
Wie schon "wer" darauf hinwies beeinflust dec das Z-Flag, also ist mein cpi überflüssig.
 
Hi Rolf,

mal was zu dem privaten ...

Da Menschen doch recht verschieden gestrickt sind kann man manchen Leuten ziemlich was vor den Latz knallen und sie nehmen es trotzdem nicht krumm. Andere reagieren ziemlich mimosig. Es gibt Leute die sich auf Anhieb unsympatisch sind und manche können mit allen gut umgehen. Es ist sehr gemischt. Bei einem Forum kommt noch erschwerend hinzu das man vom Gegenüber keine Mimik mitbekommt. Dann muß man mehr oder weniger erfolgreich versuchen mit Smileys diese Lücke zu schließen. Man sieht auch nicht auf Anhieb wie alt der Gegenüber ist. Ob man es mit einem gestandenen Ingenieur zu tun hat oder nur mit einem "Schulbengel" der mit wehenden Fahnen auf jedes neue Ziel losprescht und dann schnell gefrustet aufgibt um zu neuen Ufern zu starten. Es gibt bestimmt auch genug Leute die nur mal für eine Frage eine Antwort suchen und dann nicht mehr gesehen werden oder nur "was fertiges suchen" um sich nicht selber anstrengen zu müssen.

In deinem privaten Umfeld (Beruf, Familie, Verwandschaft, ...) wird es wohl auch ähnlich sein. Also mach dir da mal keine Gedanken. Ich hab auch schon mal den einen oder anderen Neuling hier im Forum vor den Kopf geschlagen der danach das weite gesucht hat. Manchen erklärt man es bis ins Kleinste und ausgiebig und bei manchen denkt man sich bereits nach kurzer Zeit: "Man ist der blöd. Warum kapiert der das nicht. Wie soll ich es denn noch erklären."

Lies dir mal folgenden Thread durch ...
Quadraturencoder mit ATtiny
... da ist mir mal die Hutschnur geplatzt :p :rolleyes:

Wenn du mal ein wenig Zeit hast dann kannst du dir auch mal den folgenden Thread durchlesen ...
Probleme mit Bascom Wecker mit LCD-Display mit einem ATmega8
... der Thread ist etwas länger. Da kann man auch gut sehen das die Leidensfähigkeit der Leute doch etwas unterschiedlich ist :sarcastic:

Also nicht alles persönlich nehmen.

Gruß
Dino
 
Hi Dino03,
danke für Deine Zeilen, sie haben mir gut getan.
Es ist schon so wie Du schreibst.
Bei uns im Modellflugverein Norderstedt geht es auch manchmal hoch her.

Die Threads von Dir bekomme ich nicht geöffnet..es bildet sich einfach eine weise Fläche.

Irgendwas stimmt bei mir in den Einstellungen nicht, werde dem mal nachgehen.

Grüße

Rolf
 
...Wenn du mal ein wenig Zeit hast dann kannst du dir auch mal den folgenden Thread durchlesen ...
Probleme mit Bascom Wecker mit LCD-Display mit einem ATmega8
... der Thread ist etwas länger. Da kann man auch gut sehen das die Leidensfähigkeit der Leute doch etwas unterschiedlich ist :sarcastic:

Also nicht alles persönlich nehmen.

Gruß
Dino
Auja... das war was... ich hatte stellenweise Tränen in den Augen, als ich das eben wieder gelesen habe. Der Knaller war Beitrag 78;)
 
Hi Rolf,

Die Threads von Dir bekomme ich nicht geöffnet..es bildet sich einfach eine weise Fläche.
Irgendwas stimmt bei mir in den Einstellungen nicht, werde dem mal nachgehen.
komisch ... Ich hab die Links nochmal neu angelegt und die komplette Kette zum Beitrag angegeben.
Ich hoffe mal du kannst dich wenigstens dran langhangeln. Die Beiträge sind auf jeden Fall noch öffentlich sichtbar.

Forum >> AVR-Mikrocontrollerfamilie >> Hardware >> Quadraturencoder mit ATtiny
(ist der 7te Beitrag im Hardwarebereich)

Forum >> AVR-Mikrocontrollerfamilie >> Software >> Probleme mit Bascom Wecker mit LCD-Display mit einem ATmega8
(Bei Software auf der 3ten Seite der 9te Beitrag)

Der Link öffnet allerdings eine neue Seite. Könnte es an einem PopUp-Blocker liegen?

Gruß
Dino
 
Hi,

Auja... das war was... ich hatte stellenweise Tränen in den Augen, als ich das eben wieder gelesen habe. Der Knaller war Beitrag 78;)
hab ich mir nochmal ansehen müssen ...
Beitrag #78
... au jaahhhhh ... :p :rolleyes:
Da hab ich wohl ein großes Stück aus dem Tisch gebissen :sarcastic:

Du warst da aber auch verdammt leidensfähig ... "nicht so schnell, wir kommen doch ganz gut voran..." #90

Mein Beitrag #97 hat auch einen gewissen Unterhaltungswert ;)

Gruß
Dino
 
Hallo Dino,
es klappt und bin am lesen.
Na der Matzi ist was für Leute im mikrocontroller.net gewesen.
Das kann ich mir richtig vorstellen.

Bin weiter am lesen!

12 Seiten über den Wecker..meine Frau fragte mich
"warum lachst du denn nur immer".
Wenn ich mir aber auf Seite 85 sein Bascom Programm
anschaue, war er doch eigentlich garnicht so unwissend.
Die Geduld von LotadaC ist hierbei bemerkenswert.
Seite 96 war auch Spitze
Edit
Was mich so verwirrt hat ist diese ganze Flag-Geschichte.
Flag kenne ich eigentlich aus Datenbanken, wenn du meherer hast und diese miteinader verknüpft werden sollen, dann setzt man einen Flag, damit die einem Datenbank weiß wo er bei der anderen weiter machen muss.
Das ist für mich ein Flag...

Die haben mich Anfangs auch verwirrt!
Aber durch LotadaC Hilfe und Bücher hab ich sie ganz gut im Griff.
 
Im Sommer 2012 trat ich zu dem Forum hinzu.
Was mir sehr gefiel war hier der Ton bzw. erst mal das Vorstellen und die promte Antwort
auf Fragen. Da war ich von anderen Foren eine harte Gangart gewohnt.

Ich möchte das an dieser Stelle auch mal sagen. Dieses Forum ist in mancher Sicht eine große Ausnahme. Ich bin total froh, daß ich hier meine Anfängerfragen stellen kann und ich habe das Gefühl hier wirklich weiter zu kommen. Wie es kommt, daß hier ein anderer Geist weht, kann ich nicht sagen. Es ist einfach eine große Ausnahme, ein kleines Wunder.
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)