Programmierung eines Dreiecksignals in C
-
Hallo Leute,
ich brauch eure Hilfe,ich soll für eine Hausaufgabe in dem Fach Programmieren von Mikroprozessoren ein Dreiecksignal erzeugen.Die Hardware und SW-Plattform ist auch soweit fertig, nur mit dem C Text hab ich Probleme.
Das Dreiecksignal soll von 0 auf 255Bit ansteigen und von dort wieder zurück auf 0.
Mein Professor hätte gern das ich zusätzlich eine Stufenbreite von 10mikrosekunden festlege und ein Interrupt verwende
(er ist aber nicht gewillt mir zu erklären was ein interrupt ist,
aus diesem Grund habe ich mich entschieden darauf zu verzichten)Ich habe mir jetzt folgendes überlegt:
#include <stdio.h>
#include <devices.h>
#include <timers.h>
#include <drv_dac084s085.h>dac084s085_t* ptrDAC;
static uint8_t Spannung;
static uint8_t Richtung;
timer_handler_timerISR(void *context);void main (void)
{
ptrDAC = dac084s085_open(DRV_DAC084S085_1);
timer_register_handler(0, 3922L, TimerISR);Spannung = 0;
Richtung = 1;for(;;);
}timer_handler_t TimerISR(void * context)
{
dac084s085_write(ptrDAC,0,Spannung,true);if( Spannung = 0)
{
Richtung = 1
}if(Spannung = 255)
{
Richtung = 0
}if (Richtung = 1)
{
Spannung ++
}if(richtung = 0)
{
Spannung --
}
return NULL;
}Das ist aber falsch, weil ich ja möchte das von 0-255 richtung = 1 ist, damit sich die Spannung immer um einen erhöht, und das wenn die Spannung einmal 255 erreicht hat, sie sich immer um 1 verringert, aber ich weiß nciht wie ich eine
"ab dem wert dann..." Funktion erstelle...Könnt ihr mir helfen??
Liebe Grüße
-
Simone804 schrieb:
Mein Professor hätte gern das ich zusätzlich eine Stufenbreite von 10mikrosekunden festlege und ein Interrupt verwende
(er ist aber nicht gewillt mir zu erklären was ein interrupt ist,
aus diesem Grund habe ich mich entschieden darauf zu verzichten)Ich glaube, du benutzt schon einen Interrupt. Mit timer_register_handler legst du anscheinend eine Interrupt-Routine für den Timer-Interrupt fest. Reine Vermutung, aber wie soll das sonst gehen?
Kannst du noch was zu dem Controller sagen, z.B. welcher es überhaupt ist?
timer_handler_t TimerISR(void * context)
{
dac084s085_write(ptrDAC,0,Spannung,true);if( Spannung = 0)
{
Richtung = 1
}if(Spannung = 255)
{
Richtung = 0
}if (Richtung = 1)
{
Spannung ++
}if(richtung = 0)
{
Spannung --
}
return NULL;
}Mal abgesehen von der völlig falschen Syntax ist die Logik ein bisschen durch den Wind. Die Abfragen auf die Grenzwerte sollten von der Zählrichtung abhängen. Ungefähr so:
if (Richtung == 1) { if (Spannung == 255) { Spannung = 0; Richtung = 0; } else Spannung++; } else { if (Spannung == 0) { Spannung = 255; Richtung = 1; } else Spannung--; }