PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Absoluter Anfänger



xbgamer
15.10.2006, 00:16
Hallo,
ich bin gerade dabei und möchte mir einen kleinen roboter bauen.
zu anfang möchte ich eben nur die grundaufgaben erfüllt haben er sollte nur objekten ausweichen.

aufbau hab ich mir so vorgestellt.

es sind 2 motoren vorhanden rechts und links damit er auf der stelle drehn kann.
also es sollen immer beide motoren laufen wenn er nun an ein hinderniss kommt dass rechts ist soll nur noch der rechte motor drehn und anders rumm.

sprich das kann man gut mit leds üben hab ich mir überlegt und da auf dem avr board ja auch taster dabei sind gehts ja ziemlich gut.

so bin jetzt mal so weit gekommen dass wenigstens mal die leds sprich 2 leuchten hierzu habe ich folgendes eingegeben:

ldi r16, 0xFF
out DDRB, r16
ldi r16, 0b00000011
out PORTB, r16


jetzt meine frage wie bekomme ich dass kombiniert dass wenn ich nun einen taster drücke dass eine led ausgeht?

also wenn ich jetzt zb den rechten drücke dass die linke led ausgeht oder eben andersrum.

Dank euch schon mal recht herzlich

xbgamer
15.10.2006, 11:51
weiß keiner rat?

AVRboy
15.10.2006, 14:10
HI,
Google doch mal nach Assembler bsp's !! Oder bei elektronik kompendium de oder so gabs mal ein assembler tutorial irgend so was habe ich mal gehört.
naja mit assem.. kenne ich mich nich so aus nim doch bascom.
mfg

xbgamer
15.10.2006, 14:12
jo mittlerweile hab ich auch gemerkt dass es mit bascom etwas einfacher geht. nur erkennt des mein controller net hab nen mega8 aber kommt dauernd could not identify chip is with id....

is doch schrott sitz schon ewig jett davor und immer des gleiche.

AVRboy
15.10.2006, 14:15
hast den chip init... :
$regfile = "m8def.dat"

schick doch mal den code.
mfg

xbgamer
15.10.2006, 14:49
wie jetzt hab des so eingegeben:

$regfile = "m8def.dat"
$crystal = 1000000
Ddrd = &B0110000
'PORTD = &B0000100

Do
If Pind.2 = 0 Then
Portd.4 = 1
Else
Portd.4 = 0
End If
Loop
End

relaxer
15.10.2006, 15:01
;in Assembler bzw. im AVR-Studio

.include "m8def.inc" ;damit bindest du die Tabelle ein, ist zu finden unter C:\Programme\Atmel\AVR Tools\AvrAssembler2\Appnotes

ldi r16, 0xFF
out DDRB, r16 ;Port B als Ausgang
ldi r16, 0b00000011
out PORTB, r16 ; sieht ganz gut aus ;-)

;nur noch über zwei weitere Pins deine Sensoren einlesen (Schalter) und je nach Zustand dein Port-Ausgang (PortB) steuern.
;mit sbrs oder sbrc kannst du vergleichen, der Befehl der danach kommt wird entweder bearbeitet oder übersprungen -> je nach Bit-Kombination
;mit sbi oder cbi kannst du einzelne Bits setzten oder löschen, in deinem Fall LED an oder aus :)

so ungefär sollte es funktionieren:

;-----------------------------------------------------------------------------------
.include "m8def.inc"

.def temp = r16
.def sensor = r17

;Stack-Pointer an die letzte SRAM Addresse für den Befehl "rcall"
ldi temp, LOW(RAMEND) ;LOW-Byte der obersten RAM-Adresse
out SPL, temp
ldi temp, HIGH(RAMEND) ;HIGH-Byte der obersten RAM-Adresse
out SPH, temp


;##############################################
main: ;Prog-Anfang
rcall port_init ;unterroutine


;jetzt nur noch den Inhalt im "sensor" register r17 vergleichen
sbrc sensor, 0 ;überspringe wenn Bit 0 nicht gesetzt ist
rcall MotorL_aus

sbrc sensor, 1 ;überspringe wenn Bit 1 nicht gesetzt ist
rcall MotorR_aus

...
...
...

rjmp main ;Endlosschleife -> sprung auf main
;##############################################



port_init:
ldi temp, 0xFF
out DDRB, temp ;Port B als Ausgang
ldi temp, 0b00000011
out PORTB, temp ; sieht ganz gut aus ;-)


ldi temp, 0x00
out DDRD, temp ;Port D als Eingang
ldi temp, 0xFF ; evtl. interne pull up´s aktivieren
out PORTD, temp
in sensor, PIND ;sensor = r17
ret



MotorL_aus:
sbi PORTB, PB0 ;setzte Bit 0 von PortB
ret

MotorR_aus:
sbi PORTB, PB1 ;setzte Bit 1 von PortB
ret

MotorL_ein:
cbi PORTB, PB0 ;setzte Bit 0 von PortB
ret

MotorR_ein:
cbi PORTB, PB1 ;setzte Bit 1 von PortB
ret



; Infos gibt es unter... http://www.mikrocontroller.net/articles/AVR-Tutorial:_IO-Grundlagen

..und im Datenblatt auf Seite 289

xbgamer
15.10.2006, 15:09
jetzt bin ich verwirrt bin doch jetzt an bascom drann und nimmer an assambler. und habe immernoch dass problem mit could not...

relaxer
15.10.2006, 15:17
Stimmt schon,
aber du bist hier sozusagen im "assemblerforum" ;-)

keine Panik, infos gibt es genügend...
https://www.roboternetz.de/wissen/index.php/Bascom

Stelle doch einfach mal die Frage den Bascom-Jungs :-)))