Forum: Mikrocontroller und Digitale Elektronik Avr Rs232 & Timer ?


von Sven (Gast)


Lesenswert?

Wunderschönen Sonnatg

Ich brauche für ein Projekt möglichst viele(30) Pwm's Jenachdem was 
möglich ist werd ich wohl mehrere Avrs verwenden.
Nun mein Problem wenn ich eine Soft Pwm erstelle und den Prescaler vom 
Timer unter 64 einstelle kann ich über die Rs232 keine daten mehr 
emfangen.
Ist damit die Leistungsfähigkeit schon am ende? Lg

von Peter II (Gast)


Lesenswert?

Sven schrieb:
> Ist damit die Leistungsfähigkeit schon am ende? Lg

der empfang erfolgt doch von der Hardware. Die ist unabhängig von der 
Auslastung. Oder kommt deine Software nicht nach die Daten zu 
verarbeiten?

von Sven (Gast)


Lesenswert?

Gute Frage.
Im rs232 Isr schreib ich gerade nur das emfangene Byte in eine Variable 
und setzt eine andere variable auf 1.
In der Main warte ich auf ein emfangenes Byte und übergebe das an die 
Variable der Softpwm.
Da Passiert allerdins nix mehr, Erst ab einem Prescale 64. Nur dann ist 
die Pwm viel zu langsam.

von Peter II (Gast)


Lesenswert?

dann lass doch mal eine LED in der ISR blinken ( bei jedem empfangen 
Byte umschalten). Dann siehst du ob sie noch aufgerufen wird.

von Sven (Gast)


Lesenswert?

Selbst Ohne Main klappt es nicht.

Nun schreibe ich direkt in der Rs232 Isr das emfangene Byte in die 
Variable der Softpwm aber es bleibt Emfangslos.

von Sven (Gast)


Lesenswert?

Danke klaar Led Isr Test Gute idde.
Mit gleichem ergebnis bei Prescale 64 gehts noch Prescale 8 oder 1 
leider nichtmehr

von Peter II (Gast)


Lesenswert?

Sven schrieb:
> Mit gleichem ergebnis bei Prescale 64 gehts noch Prescale 8 oder 1
> leider nichtmehr

kann nicht sein. Oder verwendest du eine Soft-RS232?

zeig doch mal den code.

von Peter II (Gast)


Lesenswert?

oder deine Timer ISR braucht mehr als 64takte. Da diese Prio größer als 
die der UART ist, wird nur noch die Timer ISR aufgerufen.

von MWS (Gast)


Lesenswert?

Peter II schrieb:
> ISR braucht mehr als 64takte.

64 Takte x Top des Timers

von Peter II (Gast)


Lesenswert?

MWS schrieb:
> Peter II schrieb:
>> ISR braucht mehr als 64takte.
>
> 64 Takte x Top des Timers

er wird wohl mehrfach die Compare ISR aufrufen. Sonst könnte er wohl 
kaum 30 PWM bedienen können.

von Sven (Gast)


Lesenswert?

1
$regfile = "m32def.dat"
2
$crystal = 12000000
3
$baud = 9600
4
Config Portd.4 = Output
5
Config Portd.5 = Output
6
Config Portd.6 = Output
7
Config Portd.0 = Input
8
Config Portd.1 = Output
9
Config Portd.7 = Output
10
11
Dim Adsoll As Byte
12
Dim Rsin As Byte
13
Dim Ist As Bit
14
Dim Pw1 As Byte
15
Dim Zahler As Byte
16
17
18
Config Timer0 = Timer , Prescale = 64
19
Enable Timer0
20
On Timer0 Isr_t1
21
22
Enable Urxc
23
On Urxc Rxd
24
25
Enable Interrupts
26
Adsoll = 101
27
Pw1 = 100
28
29
Do
30
'   If Ist = 0 Then
31
'      Pw1 = Adsoll
32
'      Print Chr(adsoll)
33
'      Ist = 1
34
'   End If
35
Loop
36
37
Rxd:
38
   Pw1 = Udr
39
   Ist = 0
40
   Toggle Portd.7
41
Return
42
43
Isr_t1:
44
   Timer0 = 254
45
   If Zahler < Pw1 Then Portd.6 = 1 Else Portd.6 = 0
46
   Incr Zahler
47
Return


Selbst wenn die Timer Isr nurnoch den wert stellt geht nixmehr. Das 
sollte keine 64 Takte dauern.

von Sven (Gast)


Lesenswert?

Soweit das ich 30Pwms habe komme ich nichtmal aktuell ist es nur eine

von Peter II (Gast)


Lesenswert?

Sven schrieb:
> Isr_t1:
>    Timer0 = 254
>    If Zahler < Pw1 Then Portd.6 = 1 Else Portd.6 = 0
>    Incr Zahler
> Return

naja, ich glaube mit BASROM und diese Art von Code wirst du wohl nicht 
mehr erreichen können.

Du kannst dir ja mal den Artikel
http://www.mikrocontroller.net/articles/Soft-PWM

durchlesen, eventuell kann man es ja in Basrom übertragen, aber ich 
würde gleich zu C raten.

von MWS (Gast)


Lesenswert?

Peter II schrieb:
> MWS schrieb:
>> Peter II schrieb:
>>> ISR braucht mehr als 64takte.
>>
>> 64 Takte x Top des Timers
>
> er wird wohl mehrfach die Compare ISR aufrufen. Sonst könnte er wohl
> kaum 30 PWM bedienen können.

Ich wollte darauf hinweisen, dass die Softpwm ISR schon ein wenig länger 
dauern kann als 64 Takte, denn mit dem Prescaler 64 wird ja erst mal der 
Timer gefüttert, welcher dann bei Top auf 0 geht. Verwendet er einen 
8Bit Timer, so geht das ganze bei 64 x 256 = 16384 Takten zwischen den 
Aufrufen, aber eben nicht mehr mit 8 x 256 = 4096 Takten dazwischen. 
Zuästzlich anders wär's noch bei CTC.

Im Prinzip stimme ich aber zu, die SPwm ISR verbraucht einfach zu viele 
Zyklen, so dass nichts mehr geht.

von MWS (Gast)


Lesenswert?

Sven schrieb:
> Selbst wenn die Timer Isr nurnoch den wert stellt geht nixmehr. Das
> sollte keine 64 Takte dauern.

Das Sichern/Rückspeichern der ISR Register dauert um die 100 Takte.

Sven schrieb:
> Isr_t1:
>    Timer0 = 254

Keine Chance.

von Falk B. (falk)


Lesenswert?

@ Sven (Gast)

30 Kanäle Soft-PWM in BASCOM halte ich für unrealistisch. In C geht es, 
wenn man es richtig macht, auch mit UART nebenbei.

Beitrag "Re: DMX Steuerung 24 Kanal"

von MWS (Gast)


Lesenswert?

Falk Brunner schrieb:
> 30 Kanäle Soft-PWM in BASCOM halte ich für unrealistisch.

Ist kein Problem, nur in Basic geht's nicht, er muss ASM einbauen, was 
auch sehr einfach möglich ist. Können muss er's natürlich, aber das 
Selbe gilt für C.

von Falk B. (falk)


Lesenswert?

@ MWS (Gast)

>> 30 Kanäle Soft-PWM in BASCOM halte ich für unrealistisch.

>Ist kein Problem, nur in Basic geht's nicht, er muss ASM einbauen,

Dann isses ja kein BASCOM mehr. Inline Assembler zählt nicht.

von MWS (Gast)


Lesenswert?

Falk Brunner schrieb:
> Dann isses ja kein BASCOM mehr. Inline Assembler zählt nicht.

Falsch. Dein Aussage wäre richtig, würde sie so lauten:
"Dann isses ja kein Basic mehr."

Bascom ist Basic verbunden mit einfachster Integration von Assembler, 
und "einfachst" ist wirklich so.

von Sven (Gast)


Lesenswert?

Okay danke.
Dann werd ich mir mal ein paar neue Lösungen ausdenken.
Zumal es ja mit ausgabe der Pwm's nicht getan ist. Ziel ist es Motoren 
Pid geregelt zu steuern.

von Peter R. (peterfido)


Lesenswert?

Bei 30 PWMs und serieller Kommunikation sind ja keine Pins mehr übrig.

Ich würde folgendes probieren:

-Interrupts weglassen
-Empfang per ischarwaiting
-Soft-PWM in die Hauptschleife packen, der Timer is eh überflüssig, wenn 
dieser ständig anschlägt


Da geht nichts verloren. Evtl. "stockt" die PWM, wenn Daten empfangen 
werden. Wenn man weiß, was da für Daten kommen und wieviel Takte das 
braucht, kann man bei keinen Daten diese Zeit als NOPs "simulieren"

Ist das ganze zu langsam, dann den Takt z.B. auf 16 MHz erhöhen.

von Falk B. (falk)


Lesenswert?

@Sven (Gast)

>Zumal es ja mit ausgabe der Pwm's nicht getan ist. Ziel ist es Motoren
>Pid geregelt zu steuern.

Na dann fang mal ne Nummer kleiner an. Regle EINEN Motor mit 
Hardware-PWM.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.