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
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?
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.
dann lass doch mal eine LED in der ISR blinken ( bei jedem empfangen Byte umschalten). Dann siehst du ob sie noch aufgerufen wird.
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.
Danke klaar Led Isr Test Gute idde. Mit gleichem ergebnis bei Prescale 64 gehts noch Prescale 8 oder 1 leider nichtmehr
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.
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.
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.
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.
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.
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.
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.
@ 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"
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.
@ 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.
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.
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.
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.
@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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.