Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
arduino:arduinosps [2021/06/18 12:03] – [Download] adminarduino:arduinosps [2024/09/06 07:11] (aktuell) admin
Zeile 87: Zeile 87:
 </code> </code>
 ===== Einschränkungen ===== ===== Einschränkungen =====
-Ein Mischbetrieb von Servo und PWM (z.B. PWM.1 und Servo.2) ist leider nicht möglich, da sich die beiden gegenseitig beeinflussen. Also entweder Servounterstützung oder PWM.+Ein Mischbetrieb von Servo und PWM (z.B. PWM.1 und Servo.2) ist leider nicht möglich, da sich die beiden gegenseitig beeinflussen. Also entweder Servounterstützung oder PWM. Auch die Ton-Ausgabe ist hiervon betroffen, da der Ton auf dem Servo 2 (PWM 2) Ausgang liegt.
  
 ===== Hardwareentsprechungen ===== ===== Hardwareentsprechungen =====
Zeile 103: Zeile 103:
 die zusätzlichen Ein/Ausgänge findet ihr hier: die zusätzlichen Ein/Ausgänge findet ihr hier:
 ^ Bezeichnung ^ Arduino Pins ^ ^ Bezeichnung ^ Arduino Pins ^
-| RC1,2 | D17,18* (A3,4) | +| RC1,2 | D18D19* (A4,A5) | 
-| Servo1,2 | D9,10 |+| Servo1,2 | D9, D10 |
 | Tone | D10 | | Tone | D10 |
 +| TM1637 Data, CLK | D12, D13 |
  
 *neben den üblichen 13 Pins des Arduinos können auch die analogen Eingänge (A0..5) als digitale Pins verwendung finden. Diesen werden einfach der Reihe nach weiter gezählt. D.h. A0 = D14, A1 = D15 ... A5 = D19 *neben den üblichen 13 Pins des Arduinos können auch die analogen Eingänge (A0..5) als digitale Pins verwendung finden. Diesen werden einfach der Reihe nach weiter gezählt. D.h. A0 = D14, A1 = D15 ... A5 = D19
Zeile 113: Zeile 114:
 {{:arduino:prototyp_tps_steckplatine.png?400|}} {{:arduino:prototyp_tps_steckplatine.png?400|}}
  
-===== Befehlssatz ===== +{{page>arduino:arduinosps:commandtable}}
-Die gelb unterlegten Bereiche sind die Erweiterungen meiner ATTiny_TPS und der Arduino_TPS Version. In eckigen Klammern stehen jeweils die entsprechenden Mnemonics des [[arduino:arduinosps:tpsass|SPS Assemblers]]. +
- +
-<html> +
-<table width="100%" cellspacing="0" border="1" style="page-break-inside: avoid"> +
-    <thead> +
-        <tr valign="TOP"> +
-            <th width="3%">&nbsp;</th> +
-            <th width="10%">0</th> +
-            <th width="10%">1</th> +
-            <th width="10%">2</th> +
-            <th width="12%">3</th> +
-            <th width="10%">4</th> +
-            <th width="14%">5</th> +
-            <th width="10%">6</th> +
-            <th width="18%">7</th> +
-        </tr> +
-    </thead> +
-    <tbody> +
-        <tr valign="TOP"> +
-            <td>&nbsp;</td> +
-            <td>n.n.</td> +
-            <td>Port<br/>[DOUT]</td> +
-            <td>Delay<br/>[WAIT]</td> +
-            <td>Jump back relative<br/>[RJMP]</td> +
-            <td>A=#<br/>[LDA]</td> +
-            <td>=A</td> +
-            <td>A=</td> +
-            <td>A=Ausdruck</td> +
-        </tr> +
-        <tr valign="TOP"> +
-            <td>0</td> +
-            <td bgcolor="#ffff00">NOP [NOP]</td> +
-            <td>aus</td> +
-            <td>1ms</td> +
-            <td>0</td> +
-            <td>0</td> +
-            <td bgcolor="#ffff00">A&lt;-&gt;B [SWAP]</td> +
-            <td>&nbsp;</td> +
-            <td>&nbsp;</td> +
-        </tr> +
-        <tr valign="TOP"> +
-            <td>1</td> +
-            <td>&nbsp;</td> +
-            <td>1</td> +
-            <td>2ms</td> +
-            <td>1</td> +
-            <td>1</td> +
-            <td>B=A [MOV]</td> +
-            <td>A=B [MOV]</td> +
-            <td>A=A + 1 [INC]</td> +
-        </tr> +
-        <tr valign="TOP"> +
-            <td>2</td> +
-            <td>&nbsp;</td> +
-            <td>2</td> +
-            <td>5ms</td> +
-            <td>2</td> +
-            <td>2</td> +
-            <td>C=A [MOV]</td> +
-            <td>A=C [MOV]</td> +
-            <td>A=A - 1 [DEC]</td> +
-        </tr> +
-        <tr valign="TOP"> +
-            <td>3</td> +
-            <td>&nbsp;</td> +
-            <td>3</td> +
-            <td>10ms</td> +
-            <td>3</td> +
-            <td>3</td> +
-            <td>D=A [MOV]</td> +
-            <td>A=D [MOV]</td> +
-            <td>A=A + B [ADD]</td> +
-        </tr> +
-        <tr valign="TOP"> +
-            <td>4</td> +
-            <td>&nbsp;</td> +
-            <td>4</td> +
-            <td>20ms</td> +
-            <td>4</td> +
-            <td>4</td> +
-            <td>Dout=A [STA]</td> +
-            <td>Din [LDA]</td> +
-            <td>A=A - B [SUB]</td> +
-        </tr> +
-        <tr valign="TOP"> +
-            <td>5</td> +
-            <td>&nbsp;</td> +
-            <td>5</td> +
-            <td>50ms</td> +
-            <td>5</td> +
-            <td>5</td> +
-            <td>Dout.1=A.1 [STA]</td> +
-            <td>Din.1 [LDA]</td> +
-            <td>A=A * B [MUL]</td> +
-        </tr> +
-        <tr valign="TOP"> +
-            <td>6</td> +
-            <td>&nbsp;</td> +
-            <td>6</td> +
-            <td>100ms</td> +
-            <td>6</td> +
-            <td>6</td> +
-            <td>Dout.2=A.1 [STA]</td> +
-            <td>Din.2 [LDA]</td> +
-            <td>A=A / B [DIV]</td> +
-        </tr> +
-        <tr valign="TOP"> +
-            <td>7</td> +
-            <td>&nbsp;</td> +
-            <td>7</td> +
-            <td>200ms</td> +
-            <td>7</td> +
-            <td>7</td> +
-            <td>Dout.3=A.1 [STA]</td> +
-            <td>Din.3 [LDA]</td> +
-            <td>A=A and B [AND]</td> +
-        </tr> +
-        <tr valign="TOP"> +
-            <td>8</td> +
-            <td>&nbsp;</td> +
-            <td>8</td> +
-            <td>500ms</td> +
-            <td>8</td> +
-            <td>8</td> +
-            <td>Dout.4=A.1 [STA]</td> +
-            <td>Din.4 [LDA]</td> +
-            <td>A=A or B [OR]</td> +
-        </tr> +
-        <tr valign="TOP"> +
-            <td>9</td> +
-            <td>&nbsp;</td> +
-            <td>9</td> +
-            <td>1s</td> +
-            <td>9</td> +
-            <td>9</td> +
-            <td>PWM.1=A [STA]</td> +
-            <td>ADC.1 [LDA]</td> +
-            <td>A=A xor B [XOR]</td> +
-        </tr> +
-        <tr valign="TOP"> +
-            <td>a</td> +
-            <td>&nbsp;</td> +
-            <td>10</td> +
-            <td>2s</td> +
-            <td>10</td> +
-            <td>10</td> +
-            <td>PWM.2=A [STA]</td> +
-            <td>ADC.2 [LDA]</td> +
-            <td>A= not A [NOT]</td> +
-        </tr> +
-        <tr valign="TOP"> +
-            <td>b</td> +
-            <td>&nbsp;</td> +
-            <td>11</td> +
-            <td>5s</td> +
-            <td>11</td> +
-            <td>11</td> +
-            <td bgcolor="#ff8000">Servo.1=A [STA]</td> +
-            <td bgcolor="#ffff00">RCin.1 [LDA]</td> +
-            <td bgcolor="#ffff00">A= A % B (Rest) [MOD]</td> +
-        </tr> +
-        <tr valign="TOP"> +
-            <td>c</td> +
-            <td>&nbsp;</td> +
-            <td>12</td> +
-            <td>10s</td> +
-            <td>12</td> +
-            <td>12</td> +
-            <td bgcolor="#ff8000">Servo.2=A [STA]</td> +
-            <td bgcolor="#ffff00">RCin.2 [LDA]</td> +
-            <td bgcolor="#ffff00">A= A + 16 * B [BYTE]</td> +
-        </tr> +
-        <tr valign="TOP"> +
-            <td>d</td> +
-            <td>&nbsp;</td> +
-            <td>13</td> +
-            <td>20s</td> +
-            <td>13</td> +
-            <td>13</td> +
-            <td bgcolor="#ffff00">E=A [MOV]</td> +
-            <td bgcolor="#ffff00">A=E [MOV]</td> +
-            <td bgcolor="#ffff00">A= B - A[BSUBA]</td> +
-        </tr> +
-        <tr valign="TOP"> +
-            <td>e</td> +
-            <td>&nbsp;</td> +
-            <td>14</td> +
-            <td>30s</td> +
-            <td>14</td> +
-            <td>14</td> +
-            <td bgcolor="#ffff00">F=A [MOV]</td> +
-            <td bgcolor="#ffff00">A=F [MOV]</td> +
-            <td bgcolor="#ffff00">A=A SHR 1 [SHR]<br/> ab V 11</td> +
-        </tr> +
-        <tr valign="TOP"> +
-            <td>f</td> +
-            <td>&nbsp;</td> +
-            <td>15</td> +
-            <td>60s</td> +
-            <td>15</td> +
-            <td>15</td> +
-            <td bgcolor="#ffff00">Push A [PUSH]</td> +
-            <td bgcolor="#ffff00">Pop A [POP]</td> +
-            <td bgcolor="#ffff00">A=A SHL 1 [SHL]<br/> ab V 11</td> +
-        </tr> +
-    </tbody> +
-</table> +
-</html> +
-Zus. Features in der Arduino_TPS Version: +
- +
-  * Es gibt 2 zus. Register (E und F) +
-  * und es gibt einen Kellerstapel mit den 2 Methoden push (auflegen) und pop (runter nehmen). In dem Stapel haben 16 Werte Platz. +
-  * Weiterhin gibt es 2 neue Berechnungen, einmal den Rest einer Division (A= A % B) und einmal eine 8-Bit umwandlung. A = A + 16 * B +
-  * Ab Version 0.6 ist auch noch der Swap Befehl hinzugekommen, der A und B Register vertauscht. +
-  * Und eine neue Berechnung A = B - A. Gerade wenn man sich im 8-Bit Raum aufhält ist es manchmal recht umständlich, diese Operation auszuführen. +
-  * ab Version 11 gibt es nun auch Shift Operationen. Diese verschieben den Inhalt des Registers A entwedernahc links SHL (was  eine Multiplikation mit 2 entspricht) oder nach rechts (SHR). Das wäre dann eine Division durch 2. **Achtung: zwar befinden wir uns hier im 4Bit Raum, diese Operationen sind aber 8 Bit fähig.** +
- +
- +
-<html> +
-<table width="100%" cellspacing="0" border="1" style="page-break-inside: avoid"> +
-    <thead> +
-        <tr valign="TOP"> +
-            <th width="3%">&nbsp;</th> +
-            <th width="8%">8</th> +
-            <th width="12%">9</th> +
-            <th width="17%">a</th> +
-            <th width="17%">b</th> +
-            <th width="13%">c</th> +
-            <th width="16%">d</th> +
-            <th width="10%">e</th> +
-            <th width="4%">f</th> +
-        </tr> +
-    </thead> +
-    <tbody> +
-        <tr valign="TOP"> +
-            <td>&nbsp;</td> +
-            <td>Page [PAGE]</td> +
-            <td>Jump absolut (#+16*page)<br/>[JMP]</td> +
-            <td>C* C&gt;0: C=C-1;<br/> +
-            Jump # + (16*page)<br/>[LOOPC]</td> +
-            <td>D* D&gt;0:D=D-1;<br/> +
-            Jump # + (16*page)<br/>[LOOPC]</td> +
-            <td>Skip if</td> +
-            <td>Call # + (16*Page)<br/>[Call]</td> +
-            <td>Callsub/Ret</td> +
-            <td>Byte Befehle</td> +
-        </tr> +
-        <tr valign="TOP"> +
-            <td>0</td> +
-            <td>0</td> +
-            <td>0</td> +
-            <td>0</td> +
-            <td>0</td> +
-            <td bgcolor="#ffff00">A==0 [SKIP0]</td> +
-            <td>0</td> +
-            <td>ret [RTR]</td> +
-            <td bgcolor="#ffff00">A=ADC.1 [BLDA]</td> +
-        </tr> +
-        <tr valign="TOP"> +
-            <td>1</td> +
-            <td>1</td> +
-            <td>1</td> +
-            <td>1</td> +
-            <td>1</td> +
-            <td>A&gt;B [AGTB]</td> +
-            <td>1</td> +
-            <td bgcolor="#ffff00">Call 1 [CASB]</td> +
-            <td bgcolor="#ffff00">A=ADC.2 [BLDA]</td> +
-        </tr> +
-        <tr valign="TOP"> +
-            <td>2</td> +
-            <td>2</td> +
-            <td>2</td> +
-            <td>2</td> +
-            <td>2</td> +
-            <td>A&lt;B [ALTB]</td> +
-            <td>2</td> +
-            <td bgcolor="#ffff00">2 [CASB]</td> +
-            <td bgcolor="#ffff00">A=RCin.1 [BLDA]</td> +
-        </tr> +
-        <tr valign="TOP"> +
-            <td>3</td> +
-            <td>3</td> +
-            <td>3</td> +
-            <td>3</td> +
-            <td>3</td> +
-            <td>A==B [AEQB]</td> +
-            <td>3</td> +
-            <td bgcolor="#ffff00">3 [CASB]</td> +
-            <td bgcolor="#ffff00">A=RCin.2 [BLDA]</td> +
-        </tr> +
-        <tr valign="TOP"> +
-            <td>4</td> +
-            <td>4</td> +
-            <td>4</td> +
-            <td>4</td> +
-            <td>4</td> +
-            <td>Din.1==1 [DEQ1 1]</td> +
-            <td>4</td> +
-            <td bgcolor="#ffff00">4 [CASB]</td> +
-            <td bgcolor="#ffff00">PWM.1=A [BSTA]</td> +
-        </tr> +
-        <tr valign="TOP"> +
-            <td>5</td> +
-            <td>5</td> +
-            <td>5</td> +
-            <td>5</td> +
-            <td>5</td> +
-            <td>Din.2==1 [DEQ1 2]</td> +
-            <td>5</td> +
-            <td bgcolor="#ffff00">5 [CASB]</td> +
-            <td bgcolor="#ffff00">PWM.2=A [BSTA]</td> +
-        </tr> +
-        <tr valign="TOP"> +
-            <td>6</td> +
-            <td>6</td> +
-            <td>6</td> +
-            <td>6</td> +
-            <td>6</td> +
-            <td>Din.3==1 [DEQ1 3]</td> +
-            <td>6</td> +
-            <td bgcolor="#ffff00">6 [CASB]</td> +
-            <td bgcolor="#ff8000">Servo.1=A [BSTA]</td> +
-        </tr> +
-        <tr valign="TOP"> +
-            <td>7</td> +
-            <td>7</td> +
-            <td>7</td> +
-            <td>7</td> +
-            <td>7</td> +
-            <td>Din.4==1 [DEQ1 4]</td> +
-            <td>7</td> +
-            <td>&nbsp;</td> +
-            <td bgcolor="#ff8000">Servo.2=A [BSTA]</td> +
-        </tr> +
-        <tr valign="TOP"> +
-            <td>8</td> +
-            <td bgcolor="#ffff00">8</td> +
-            <td>8</td> +
-            <td>8</td> +
-            <td>8</td> +
-            <td>Din.1==0 [DEQ0 1]</td> +
-            <td>8</td> +
-            <td bgcolor="#ffff00">Def 1 [DFSB]</td> +
-            <td  bgcolor="#ff8000">Tone=A [TONE]</td> +
-        </tr> +
-        <tr valign="TOP"> +
-            <td>9</td> +
-            <td bgcolor="#ffff00">9</td> +
-            <td>9</td> +
-            <td>9</td> +
-            <td>9</td> +
-            <td>Din.2==0 [DEQ0 2]</td> +
-            <td>9</td> +
-            <td bgcolor="#ffff00">2 [DFSB]</td> +
-            <td>&nbsp;</td> +
-        </tr> +
-        <tr valign="TOP"> +
-            <td>a</td> +
-            <td bgcolor="#ffff00">10</td> +
-            <td>10</td> +
-            <td>10</td> +
-            <td>10</td> +
-            <td>Din.3==0 [DEQ0 3]</td> +
-            <td>10</td> +
-            <td bgcolor="#ffff00">3 [DFSB]</td> +
-            <td>&nbsp;</td> +
-        </tr> +
-        <tr valign="TOP"> +
-            <td>b</td> +
-            <td bgcolor="#ffff00">11</td> +
-            <td>11</td> +
-            <td>11</td> +
-            <td>11</td> +
-            <td>Din.4==0 [DEQ0 4]</td> +
-            <td>11</td> +
-            <td bgcolor="#ffff00">4 [DFSB]</td> +
-            <td>&nbsp;</td> +
-        </tr> +
-        <tr valign="TOP"> +
-            <td>c</td> +
-            <td bgcolor="#ffff00">12</td> +
-            <td>12</td> +
-            <td>12</td> +
-            <td>12</td> +
-            <td>S_PRG==0 [PRG0]</td> +
-            <td>12</td> +
-            <td bgcolor="#ffff00">5 [DFSB]</td> +
-            <td>&nbsp;</td> +
-        </tr> +
-        <tr valign="TOP"> +
-            <td>d</td> +
-            <td bgcolor="#ffff00">13</td> +
-            <td>13</td> +
-            <td>13</td> +
-            <td>13</td> +
-            <td>S_SEL==0 [SEL0]</td> +
-            <td>13</td> +
-            <td bgcolor="#ffff00">6 [DFSB]</td> +
-            <td>&nbsp;</td> +
-        </tr> +
-        <tr valign="TOP"> +
-            <td>e</td> +
-            <td bgcolor="#ffff00">14</td> +
-            <td>14</td> +
-            <td>14</td> +
-            <td>14</td> +
-            <td>S_PRG==1 [PRG1]</td> +
-            <td>14</td> +
-            <td>&nbsp;</td> +
-            <td>&nbsp;</td> +
-        </tr> +
-        <tr valign="TOP"> +
-            <td>f</td> +
-            <td bgcolor="#ffff00">15</td> +
-            <td>15</td> +
-            <td>15</td> +
-            <td>15</td> +
-            <td>S_SEL==1 [SEL1]</td> +
-            <td>15</td> +
-            <td bgcolor="#ffff00">restart [REST]</td> +
-            <td bgcolor="#ffff00">PrgEnd [PEND]</td> +
-        </tr> +
-    </tbody> +
-</table> +
-</html> +
-Zus. Features in der Arduino_TPS Version: +
- +
-  * Weil wir genug EEPROM haben ist der Page Bereich auf 16 Seiten ausgedehnt. Macht also ins. 256 Bytes +
-  * Beim Skip gibt’s noch den A=0 Befehl. +
-  * Über die E Befehle können nun auch 6 echte Unterprogramme angelegt werden. Diese werden über den Befehl Def# angelegt. Mit Call# wird die Routine angesprungen. Mit Return kommt man zurück. Die Def# dürfen auch oberhalb der 256 Bytes im EEPROM liegen. Also auch ausserhalb der Reichtweite der Sprungbefehle. +
-  * Neu ist auch der Restartbefehl, mit dem der ganze Controller neu gestartet wird. +
-  * Im Bereich F sind Befehle hinterlegt, die mit 8 Bit Auflösung arbeiten. +
-  * FF bedeutet Programmende. → automatischer Sprung nach 0. +
-  * **NEU** Tone Befehl: gibt einen Ton aus. Basis sind die Midinoten. Es werden die Midi Noten von 36 (C2) bis 108 (C8) unterstützt. Ausgang ist der PWM 2. Basis ist das A-Register als 8 Bit Wert. +
- +
-Und nun viel Spass mit dem Arduino.\\ +
-Achja, wie immer alles ohne Gewähr...\\ +
-Und nun noch ein kleiner Testaufbau:\\ +
-{{:arduino:arduinosps_test_sm.jpg?200|}}+
 ===== InField Programmierung ===== ===== InField Programmierung =====
  
Zeile 605: Zeile 166:
 [[https://wkla.no-ip.biz/gogs/Willie/ArduinoSPS|Arduino SPS Source]]\\ [[https://wkla.no-ip.biz/gogs/Willie/ArduinoSPS|Arduino SPS Source]]\\
  
 +===== Schlusswort ===== 
 +Und nun viel Spass mit dem Arduino.\\ 
 +Achja, wie immer alles ohne Gewähr...\\ 
 +Und nun noch ein kleiner Testaufbau:\\ 
 +{{:arduino:arduinosps_test_sm.jpg?200|}}
  
arduino/arduinosps.1624017837.txt.gz · Zuletzt geändert: 2021/06/18 12:03 von admin
CC Attribution-Share Alike 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0