WCM - Das österreichische Computer Magazin Forenübersicht
 

Zurück   WCM Forum > Rat & Tat > Simulationen > Home Cockpit - Das Forum für die "Bastler"

Home Cockpit - Das Forum für die "Bastler" Cockpitbauer tauschen Pläne, Erfahrungen, Meinungen über den Bau von Homecockpits aus...

Microsoft KARRIERECAMPUS

Antwort
 
Themen-Optionen Ansicht
Alt 25.11.2006, 19:55   #1
philharmony
Master
 
Registriert seit: 11.03.2003
Alter: 41
Beiträge: 610


philharmony eine Nachricht über ICQ schicken
Standard AVR-Controller Allgemein

So, bevor ich jedes mal nen neuen Thread aufmache, hier ein neuer für alle Fragen, Antworten und Tips was AVR-Controller, WinAVR, AVR-Studio etc angeht.

Meine erste Frage: Worin unterscheiden sich die Register 0-15 von 16-31?
Es ist in diversen Tutorials immer wieder die Rede das bestimmte Funktionen nur mit den Oberen 16 gehn, und das die unteren mit diversen Funktionen verknüpft sind (wie counter etc).
Folgt das einer verständlichen gesetzmässigkeit? Aus dem Manual geht das auch nicht wirklich hervor, vllt weiss da jmd mehr?
philharmony ist offline   Mit Zitat antworten
Alt 26.11.2006, 00:21   #2
dirkan
Master
 
Registriert seit: 14.02.2002
Alter: 66
Beiträge: 644


Standard

Hallo,

Nur wenn du in Assembler programmierst, wirst du den Unterschied kennen müssen. Es sind Funktionen zur indexierung, also immer wenn du Tabellen verarbeitest, die nur in den oberen gehen. Aber es gibt noch mehr Einschränkungen.
Alles steht aber perfekt im Handbuch von Atmel!


Gruss Dirk
dirkan ist offline   Mit Zitat antworten
Alt 26.11.2006, 01:54   #3
philharmony
Master
 
Registriert seit: 11.03.2003
Alter: 41
Beiträge: 610


philharmony eine Nachricht über ICQ schicken
Standard

Da ich absolut keine Ahnung von C habe, und mit Assembler soweit ganz gut klarkomme (soweit ich das nach ein paar einfachen Beispielen sagen kann) ist das ganz interessant für mich.
In demfall muss ich das Handbuch doch nochmal ausführlicher lesen.
Vielleicht hätte ich mir für den Anfang lieber nen nicht ganz so mächtigen und Umfangreichen Controller wie den Atmega8535 Kaufen sollen, der kann sooo viel dass ich gar nicht weiss wo ich angangen soll
Ich denke für ne "einfache" Panelsteuerung (Diverse NAV/COM- sowie Overhead-Panels) is der sowieso etwas oversized oder?
philharmony ist offline   Mit Zitat antworten
Alt 27.11.2006, 17:18   #4
philharmony
Master
 
Registriert seit: 11.03.2003
Alter: 41
Beiträge: 610


philharmony eine Nachricht über ICQ schicken
Standard

Moin, habe hier ein kleines Problem beim Versuch, eine REdec-Funktion zu entwickeln.
Im Simulationsmodus der AVR-Studio funktionert es, auf dem Board leuchtet immer nur LED7, sie geht aus wenn SW0 ODER SW1 gedrückt sind.
Hier der Assemblercode:

Zitat:
.nolist
.include "C:\Program Files\Atmel\AVR Tools\AvrAssembler2\Appnotes\m8535def.inc"
.list

.def vorrueck=r16
.def counter=r17
.def AR1=r18
.def AR2=r19
.def gezaehlt=r20
.def hilfszaehler=r21
rjmp main

main:

ldi AR1,LOW(RAMEND) ;Stackpointer
out SPL,AR1
ldi AR1,HIGH(RAMEND)
out SPH,AR1

ldi AR1, 0x00 ;DataDirection D für Input
out DDRD, AR1

ldi AR1, 0xFF ; Port D alles auf 1 Setzen (1=alles aus)
out PORTD, AR1

ldi AR1, 0xFF ; Datadirection B auf 0 also Eingang
out DDRB, AR1 ; Port B alles 1 damit alle LDS aus
out PORTB, AR1

ldi gezaehlt, 1
loop:
in AR2, PIND
rcall pruefen_reset
rcall ausgabe
rjmp loop






pruefen_reset:
ldi AR1, 0xFF
cpse AR1, AR2
rjmp pruefen_vor
rcall entprellen
ldi gezaehlt, 0
ret

pruefen_vor:
ldi AR1, 0xFE
cpse AR1, AR2
rjmp pruefen_rueck
rcall entprellen
ldi vorrueck, 1
rjmp pulse

pruefen_rueck:
ldi AR1, 0xFD
cpse AR1, AR2
rjmp pulse
rcall entprellen
ldi vorrueck, 2
rjmp pulse

pulse:
ldi AR1, 0xFC
cpse AR1, AR2
rjmp loop
rcall entprellen
ldi AR1, 0
cpse AR1, gezaehlt
rjmp loop
ldi gezaehlt, 1
ldi AR1, 0xFE
cpse AR1, vorrueck
rjmp decrease
rjmp increase

decrease:
dec counter
rjmp ausgabe

increase:
inc counter
rjmp ausgabe

ausgabe:
mov R1, counter
com R1
out PORTB, R1
rjmp loop

entprellen:
clr hilfszaehler
loop2:
in AR2, PIND
cpse AR1, AR2
rjmp loop
inc hilfszaehler
ldi AR2, 56
cpse hilfszaehler, AR2
rjmp loop2
ret

philharmony ist offline   Mit Zitat antworten
Alt 28.11.2006, 13:59   #5
philharmony
Master
 
Registriert seit: 11.03.2003
Alter: 41
Beiträge: 610


philharmony eine Nachricht über ICQ schicken
Standard

Ok, hat sich geklärt, ich hatte an einigen Stellen statt rjmp rcall benutzt, dann aber kein RET, daher hatte ich dann immer einen Stack overflow.
Hier der einwandfrei funktionierende text:

Zitat:
.nolist
.include "C:\Program Files\Atmel\AVR Tools\AvrAssembler2\Appnotes\m8535def.inc"
.list

.def vorrueck=r16
.def counter=r17
.def AR1=r18
.def AR2=r19
.def gezaehlt=r20
.def hilfszaehler=r21
rjmp main

main:

ldi AR1,LOW(RAMEND) ;Stackpointer
out SPL,AR1
ldi AR1,HIGH(RAMEND)
out SPH,AR1

ldi AR1, 0x00 ;DataDirection D für Input
out DDRD, AR1

ldi AR1, 0xFF ; Port D alles auf 1 Setzen (1=alles aus)
out PORTD, AR1

ldi AR1, 0xFF ; Datadirection B auf 0 also Eingang
out DDRB, AR1 ; Port B alles 1 damit alle LDS aus
out PORTB, AR1

ldi gezaehlt, 1
loop:
in AR2, PIND
rcall pruefen_reset
rcall ausgabe
rjmp loop






pruefen_reset:
ldi AR1, 0xFF
cpse AR1, AR2
rjmp pruefen_vor
rcall entprellen
ldi gezaehlt, 0
ret

pruefen_vor:
ldi AR1, 0xFE
cpse AR1, AR2
rjmp pruefen_rueck
rcall entprellen
ldi vorrueck, 1
rjmp pulse

pruefen_rueck:
ldi AR1, 0xFD
cpse AR1, AR2
rjmp pulse
rcall entprellen
ldi vorrueck, 2
rjmp pulse

pulse:
ldi AR1, 0xFC
cpse AR1, AR2
ret
rcall entprellen
ldi AR1, 0
cpse AR1, gezaehlt
ret
ldi gezaehlt, 1
ldi AR1, 0xFE
cpse AR1, vorrueck
rjmp decrease
rjmp increase

decrease:
dec counter
ret

increase:
inc counter
ret

ausgabe:
mov R1, counter
com R1
out PORTB, R1
ret

entprellen:
clr hilfszaehler
loop2:
in AR2, PIND
cpse AR1, AR2
rjmp loop
inc hilfszaehler
ldi AR2, 2
cpse hilfszaehler, AR2
rjmp loop2
ret

philharmony ist offline   Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.

Gehe zu


Alle Zeitangaben in WEZ +2. Es ist jetzt 05:30 Uhr.


Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Forum SEO by Zoints
© 2009 FSL Verlag