Hallo Leute,
ich versuche mittels Assembler einer Boardnetzüberwachung zu
Programmieren. Der µC ist der im Titel genannte.
Funktionieren soll das ganze so:
Der Messwert der 13 V Versorgung wird mittels ADC an den µC
weitergegeben. Nun wird mittels Programmierung verglichen, ob die
Spannung kleiner 11 V, bzw. größer 15 V ist. Sollte eins davon der Fall
sein, wird zu der Markierung gesprungen, welche das System abschaltet
(P_AUS).
Die Spannung kommt aus einem DCDC-Wandler also ist relativ Konstant.
Hier mein Ansatz:
1 | P_U012: mov A, [U012] ;ADC Messwert in Register A schreiben
|
2 | sub A, 10 ;Ziehe 10 vom ADC Wert ab
|
3 | cmp A, 2 ;Vergleiche Delta U mit 2
|
4 | jc P_AUS ;Wenn A kleiner als 2, springe zu P_AUS
|
5 | sub A, 16 ;Ziehe 16 vom ADC Wert ab
|
6 | cmp A, 2 ;Vergleiche Delta U mit 2
|
7 | jc P_AUS ;Wenn A kleiner als 2, springe zu P_AUS
|
Den [U012] Wert bekomme ich aus:
1 | WRU012:
|
2 | mov [U012], [ADC_cResult]
|
3 | M8C_SetBank1
|
4 | or reg[ABF_CR0], 80h ;Analog Input MUX 0 für Column 0
|
5 | ;auswählen (ungerade Ports)
|
6 | M8C_SetBank0
|
7 | mov A, reg[AMX_IN]
|
8 | and A, 0FDh ; Port 0.3 für AI MUX 0
|
9 | ;auswählen
|
10 | or A, 1
|
11 | mov reg[AMX_IN], A
|
12 | jmp ADRET
|
13 |
|
14 |
|
15 | ADRET: inc [ADCOUNT]
|
Gebe ich die 13 V auf die Testplatine, wird das System erst gar nicht
eingeschaltet. Prinzipiell sollte sie ja mit den 13 V arbeiten und dann
abschalten, wenn ich die Spannung verändere.
Verändere ich das Segment von "P_U012", indem ich den SUB Befehl
entferne und direkt vergleiche, schaltet sich das System ein, aber auch
direkt wieder aus, habe dann quasi ne Blinkschaltung :D
habt ihr vielleicht ein paar Vorschläge, was da nicht stimmt?
Es ist noch zu sagen, dass ich nur 3 Sprungbefehle zur Verfügung habe.
Einmal jmp, jc/jnc und jz/jnz.
ich hoffe ich hab das einigermaßen verständlich dargestellt und
bitte nagelt mich nicht auf die korrekte Bezeichnung fest, bin erst seit
diesem Jahr dabei zu Programmieren ;)
Grüße
Bambule