PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : hallo geht das schneller?



q3
30.05.2007, 19:20
hi leute ich schreib mal den quellcode....hab nen atmega8 und passendes board mit rn-funk ...hab allerdings ein problem mit der anzahl der messwerte pro sekunde.. nun meine frage geht das irgendwie schneller?


$regfile = "m8def.dat"
$hwstack = 82
$framesize = 68
$swstack = 68

$crystal = 16000000 'Quarzfrequenz
$baud = 19200

Config Adc = Single , Prescaler = Auto , Reference = Avcc

Timsk = &B00100101
Mcucr = &B00001010
Gicr = &B11000000
Sreg = &B10000000
Tccr1b = &B11000010

Config Pinc.0 = Input
Config Pinc.1 = Input
Config Pinc.2 = Input
Config Pinc.3 = Input

Config Pind.0 = Input
Config Pind.2 = Input
Config Pind.3 = Input

Const Ref = 4950 / 1023
Const Zei = 1 / 0.0156

Dim A As Integer
Dim I As Integer
Dim Volt As Long
Dim D As Long
Dim W As Long

Config Single = Scientific , Digits = 1
On Timer0 Aus
On Int0 Ir0 'Portd pin3

Config Timer1 = Timer , Capture Edge = Rising , Noise Cancel = 0 , Prescale = 1024
Config Timer0 = Timer , Prescale = 1024

Stop Timer1
Stop Timer0

Dim Test As Integer

Do


For I = 0 To 3
Start Adc
W = Getadc(i)
Volt = W * Ref
Print ; I ; " " ; Volt
Waitms 30
Next I
'D = D * Zei

Loop
End


Aus:
A = A + 1
Return


Ir0:
Stop Timer1
D = Timer1
Timer1 = 0
Print "4 " ; D
Start Timer1
Return

uwegw
30.05.2007, 19:30
das waitms 30 weglassen.
W direkt versenden, die Umrechung im Empfänger (PC?) erledigen lassen. Divisionen mit 16bit-Zahlen ziehen viel Rechenzeit.

q3
30.05.2007, 20:07
die wartezeit von 30ms sind (ausgetestet) mit meiner progammvariante mindestens nötig, damit keine daten veschluckt werden bei der übermittlung via rn funk. wenn jemand da noch ne variante als alternative hat oder ne variante die ad wandlung zu beschleunigen dann wäre das super.

uwegw
30.05.2007, 20:21
Muss man startadc vor jeder Wandlung aufrufen, oder reicht auch einmal am Anfang?

Am meisten dürfte es aber bringen, möglichst viele Aufgaben auszulagern. Also Umrechung in Volt extern, Daten nicht als Ascii senden, sondern als einfache Bytes.

Wie schnell muss es werden?

Um das letzte aus dem AVR herauszuholen, käme eventuell noch Assembler in Betracht.

Rofo88
30.05.2007, 20:35
Mann kann auch auf nen Mega88 umsatteln, der ist Layoutgleich und geht bis 20MHz.

robocat
30.05.2007, 21:43
hi,

entschuldigt die zwischenfrage, ist reichlich offtopic, aber wollte nicht extra einen thread aufmachen:

ich habe hier eine schaltung mit nem a8, und jetzt wird mir der speicher (flash) langsam knapp. gibt es einen annähernd pin-gleichen µC, den ich stattdessen verwenden kann? der a168 könnte ja gehen, da müsste ich nur die PWM ausgänge woanders hinverlegen, oder?

gruesse

uwegw
31.05.2007, 08:44
der a168 könnte ja gehen, da müsste ich nur die PWM ausgänge woanders hinverlegen, oder?

Den M168 kannst du nehmen. An den PWM-Ausgängen müsstest du auch nur die Software etwas anpassen. Der m168 hat an allen Pins PWM, wo der M8 sie auch hat.

q3
31.05.2007, 18:52
hi nochmal

wie issn das mit dem waitms ? funktionieren während der wartezeit die interupts oder wäre es besser einfach statt wartezeit ne entschprechend lange leere for schleife rumrasseln zu lassen?

Rofo88
31.05.2007, 19:30
Während der Wartezeit funzen die Interrupts da der Atmel ja nichts anderes macht als sinnlos Register raufzuzälen um die Zeit rumzubekommen. Die Zeit die der Interrupt zur Abarbeitung braucht kommt zur Wartezeit mit dazu, also Gesammtzeit = Waitms + Interruptzeit


MfG