-
-
Erfahrener Benutzer
Roboter-Spezialist
Absoluter Anfänger
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
-
Erfahrener Benutzer
Roboter-Spezialist
-
Erfahrener Benutzer
Fleißiges Mitglied
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
-
Erfahrener Benutzer
Roboter-Spezialist
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.
-
Erfahrener Benutzer
Fleißiges Mitglied
hast den chip init... :
$regfile = "m8def.dat"
schick doch mal den code.
mfg
-
Erfahrener Benutzer
Roboter-Spezialist
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
-
Neuer Benutzer
Öfters hier
;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/artic..._IO-Grundlagen
..und im Datenblatt auf Seite 289
-
Erfahrener Benutzer
Roboter-Spezialist
jetzt bin ich verwirrt bin doch jetzt an Bascom drann und nimmer an assambler. und habe immernoch dass problem mit could not...
-
Neuer Benutzer
Öfters hier
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 ))
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
-
Foren-Regeln
Lesezeichen