Archiv verlassen und diese Seite im Standarddesign anzeigen : Von Bascom in C/Ansi C
Hallo,
da ich nur c bzw ansis c kann und mit basecom oder anderen sprachen noch nicht klar komme, brauch ich eure hilfe... O:)
kann mir jemand das in C übersetzen??bitte ! !
(zur auswertung einer gabellichtschranke von sharp)
.... bei google gibts da leider noch kein sprachtool für #-o
################################################## #####
$regfile = "m32def.dat"
' bei Mega 16 $regfile = "m16def.dat"
$framesize = 32
$swstack = 32
$hwstack = 32
$crystal = 16000000 'Quarzfrequenz
$baud = 9600
Config Int0 = Falling
Config Timer1 = Timer, Prescale = 256
Const Timervorgabe = 3036
Const Markierungenproscheibe = 120
Dim Zaehlerirq0 As Long
Dim Impulseprosekunde As Long
Dim Impulseprominute As Long
Dim Umdrehungenprominute As Integer
Print
Print "* RN-CONTROL 1.4 *"
Print "Drehzahl Messung"; ""
Zaehlerirq0 = 0
On Int0 Irq0
Enable Int0
On Timer1 Timer_irq
Enable Timer1
Enable Interrupts
Do
Print
Print "Impulse Sek: "; Impulseprosekunde
Impulseprominute = Impulseprosekunde * 60
Umdrehungenprominute = Impulseprominute / Markierungenproscheibe
Print "Umdreh. Min: "; Umdrehungenprominute
Wait 3
Loop
End
'Pro Impuls (Markierung auf Scheibe) ein Aufruf
Irq0:
Incr Zaehlerirq0
Return
'Pro Sekunde ein Aufruf
Timer_irq:
Timer1 = Timervorgabe
Impulseprosekunde = Zaehlerirq0
Zaehlerirq0 = 0
Return
######################################
mit freundlichen grüßen
stefan
Hallo balrog,
wo ist genau das Problem?!? Wenn du deinen Controller in C Programmieren kannst, dann kannst du das Basic Programm doch auch in C Umwandeln. Ich sehe nichts, was man als C-Programmierer nicht verstehen kann. Du musst natürlich wissen, wie man IRQs in C nutzt und die Hardware einstellt. Davon hab ich aber leider keine Ahnung, da ich bsi jetzt nur in Assembler progge.
Gruß,
SIGINT
Ein kleiner Ansatz,
Der Geber hängt auf einem Externen Interrupt.
Wenn der auslöst wird eine Variable Zaehlerirq0 um eins erhöht.
Timer 1 wird so konfiguriert, daß er jede Sekunde einen Interrupt auslöst.
Hier wird die Zaehlerirq0 ausgelesen und auf Null gesetzt.
In der Hauptschleife würd ich dann die Berechnungen machen und ausgeben,
ist das jetzt schwer ?
Gruß Sebastian
ist das jetzt schwer ?
Sicher ist das nicht schwer, wenn man sein Hirn mal einschaltet.
Aber, ich denke mal das is der Typ User, der ne "Komplettlösung" haben will ...
tut mir leid aber ich kann mit dem basecomzeugs echt ncihts anfangen.. leider
hoffe es wäre irgendeiner so freundlich und kann mir das in c übersetzen oder hat es schon aufm pc und kann es mir schicken..
mit freundlichen grüßen
stefan
tut mir leid aber ich kann mit dem basecomzeugs echt ncihts anfangen
Naja, ich halte davon auch nichts, aber lesen kann ich es schon :wink:
Klar könnte ich das direkt in C schreiben, aber Du sagst
da ich nur c bzw ansis c kann
sollte es ja kein Problem sein .
Ich hab Dir auch das Programm übersetzt, der Rest ist Deine Sache ...
Gruß Sebastian
man ihr seid echt witzig...
ich hab bisher c++ immer nur so verwendet um programme zu schreiben für den pc. NICHT mikrocontroller, hab mir nur in letzter zeit ein bisschen ansis c angeschaut,weil ich es ja brauch um einen mikrocontroller zu steuern.. aber ich versteh jetzt von dem basecomzeug einfach 0 ! ! deshalb fällt es mir auch total schwer das in c zu übersetzen weil ich garnicht weiß was da zeile für zeile in basecom steht... also kann ich es auch schlecht übersetzen:-(
Der Geber hängt auf einem Externen Interrupt.
Wenn der auslöst wird eine Variable Zaehlerirq0 um eins erhöht.
Timer 1 wird so konfiguriert, daß er jede Sekunde einen Interrupt auslöst.
Hier wird die Zaehlerirq0 ausgelesen und auf Null gesetzt.
In der Hauptschleife würd ich dann die Berechnungen machen und ausgeben,
Reicht dir der Ansatz nicht mit dem Datenblatt und der Compilerdokumentation ?
Less doch mal den Text in dem Pdf wo des her hast und auserdemdu musst doch nur Timer1 nehmen in ner subroutine "zählen" umrechnen und z.B. auf einem lcd ablesen.(sehe dir mal das datenblatt)
naja ... ich werds versuchen...
aber falls jemand das programm in c hat, bitte bitte schickt es mir ! ;-) danke !
SprinterSB
29.08.2006, 15:53
Es ist einfacher (und bringt dir auch mehr), wenn du versuchst, die Arbeitsweise des Programms zu verstehen und es dann selber in C programmierst. Es sind eh nicht alle Sachen übertragbar, ein Print in BASIC macht was anderes als ein printf in C! Oder such dir ein paar nicht zu schwierige C-Beispiele aus für dein erstes C-Projekt, und nicht gleich ne "Übersetzung" von BASIC nach C.
Der Teufel steckt im Detail, vor allem bei µCs kann das am Anfang frustrierend sein. Klar, du willst möglichst schnell dein Ding zum laufen haben, aber die investierte Zeit wird sich lohnen...
ich weiß nicht ob ihr mich nicht versteht;-) aber ich weiß absolut nicht was da steht ... ich kenne die ganzen basecombefehle definitionen nicht !! deshalb kann ich auch nicht nachvollziehen was da abläuft, geschweige denn es in c zu übersetzen!!:-(
auch nicht stück für stück weil ich einfach 0 ahnung von basecom habe ! !
wenn mir einer alles erklärt gerne, aber so wäre es für mich einfacher es in c zu haben denn dann kann ich die basecombefehel auch nachvollziehen !
danke für eure zahlreichen beiträge !
aber eine c übersetzung wäre mir am liebsten..
Der Geber hängt auf einem Externen Interrupt.
Wenn der auslöst wird eine Variable Zaehlerirq0 um eins erhöht.
Timer 1 wird so konfiguriert, daß er jede Sekunde einen Interrupt auslöst.
Hier wird die Zaehlerirq0 ausgelesen und auf Null gesetzt.
In der Hauptschleife würd ich dann die Berechnungen machen und ausgeben,
Reicht dir der Ansatz nicht mit dem Datenblatt und der Compilerdokumentation ?
da:
Es ist einfacher (und bringt dir auch mehr), wenn du versuchst, die Arbeitsweise des Programms zu verstehen und es dann selber in C programmierst. Es sind eh nicht alle Sachen übertragbar, ein Print in BASIC macht was anderes als ein printf in C! Oder such dir ein paar nicht zu schwierige C-Beispiele aus für dein erstes C-Projekt, und nicht gleich ne "Übersetzung" von BASIC nach C.
Ich geb dir noch nen Tip am Rande: Eine komplette übersetzung wird dir hier keiner liefern. Das ist nunmal nicht Sinn und Zweck dieses Forums.
Fakt ist auch, das ohne Eigeninitiative hier recht wenig passieren wird.
Ergo: Fang an zu programmieren und wenn du dabei auf Probleme stößt werden deine Fragen und Probleme hier gerne beantwortet.
Grüße,
da Hanni.
ich versteh das hauptprogramm ja, aber das hier
zitat
"
Der Geber hängt auf einem Externen Interrupt.
Wenn der auslöst wird eine Variable Zaehlerirq0 um eins erhöht.
Timer 1 wird so konfiguriert, daß er jede Sekunde einen Interrupt auslöst.
Hier wird die Zaehlerirq0 ausgelesen und auf Null gesetzt.
"
weiß ich einfach nicht wie das aussehen soll in c weil ich in der hinsicht noch nie was gemacht habe! was ist ein interrupt ? und irq0 ???
mfg
stefan
Nuja, in dem Fall empfehle ich dir das Datenblatt einmal genauer anzusehen, genauso wie die Doku der entsprechenden Lib deines Compilers.
Im übrigen könnte ein Blick in diverse Tutorials, z.B. hier im Wiki oder auf www.mikrocontroller.net eine ganze Ecke weiterhelfen.
Grüße,
da Hanni.
So,
ich versuche mal den Quelltext zu Kommentieren... dann sollte jeder
sehen, daß das ganz einfach zu verstehen ist.
################################################## #####
$regfile = "m32def.dat" // Include Datei für Registerdefinitionen
' bei Mega 16 $regfile = "m16def.dat"
$framesize = 32 // Irgendwelche Einstellungen für BASCOM
$swstack = 32 // Stack?!?!
$hwstack = 32 // Stack?!?!
$crystal = 16000000 'Quarzfrequenz //Quarzfrequen
$baud = 9600 // Serielle Schnittstelle
Config Int0 = Falling // INT0 bei fallender Flanke an PIN.d2
Config Timer1 = Timer, Prescale = 256 // Timer1 einstellen
Const Timervorgabe = 3036 //Konstante definieren
Const Markierungenproscheibe = 120 //DITO
Dim Zaehlerirq0 As Long // Variable deklarieren
Dim Impulseprosekunde As Long //dito
Dim Impulseprominute As Long //dito
Dim Umdrehungenprominute As Integer //dito
Print //
Print "* RN-CONTROL 1.4 *" //
Print "Drehzahl Messung"; "" // Text ausgeben
Zaehlerirq0 = 0 //Variable=Wert
On Int0 Irq0 // Bei INT0 die Subroutine "Irq0" aufrufen
Enable Int0 // INT0 einschalten
On Timer1 Timer_irq //Bei Timer1-Int die Sub "Timer_irq" aufrufen
Enable Timer1 //Timer1-Int einschalten
Enable Interrupts // Alle Interrupts freigeben
Do // Endlosschleife
Print //
Print "Impulse Sek: "; Impulseprosekunde // Text und Variable ausgeben
Impulseprominute = Impulseprosekunde * 60 // Irgendwas rechnen
Umdrehungenprominute = Impulseprominute / Markierungenproscheibe //dito
Print "Umdreh. Min: "; Umdrehungenprominute //Text und Var ausgeben
Wait 3 //Warten
Loop //Endlosschleife-Ende
End // Ende des Hauptprogramms
'Pro Impuls (Markierung auf Scheibe) ein Aufruf
Irq0: //Subroutine "Irq0"
Incr Zaehlerirq0 //Variable um eins erhöhen
Return // Zurück zum Hauptprogramm
'Pro Sekunde ein Aufruf
Timer_irq: //Subroutine
Timer1 = Timervorgabe // Timer1 mit Wert laden
Impulseprosekunde = Zaehlerirq0 // irgendwas rechnen
Zaehlerirq0 = 0 // Var=Wert
Return // Zurück zum Hauptprogramm
######################################
Gruß,
SIGINT
Es liegt doch auf der Hand ...
jemand der C Programmiert kann BASCOM zumindest lesen (weil Text).
Vorraussetzung für C ist sogar das man BASCOM zumindest versteht und interpretieren kann.
Oben musste stehen "Such idi der mir Fleißarbeit abnimmt".
Ich zweifle an dessen C-Kenntnisse wenn er das nicht übersetzt bekommt ;-)
Schöne Grüße
Hmm,
es stellt sich die Frage, ob der Stefan dieses eine Programm braucht,
sprich ein Drehzahlmesser und fertig, oder ob allgemein Programmieren lernen will.
Wenn nur ein Drehzahlmesser gefragt ist, würde ich mir die kostenlose Version von Basic runterladen,
kompilieren, flashen, fertig.
Wenn es darum geht µC allgemein kennezulernen und noch C dabei zu lernen würde ich mit Blinklicht anfangen.
Und wenn es sich darum dreht das eine Programm in C umzusetzen, aus welchem Grund auch immer würde ich das in der Jobsuche schreiben, es findet sich sicher jemand, der gerne für einen Mega16-32 oder so das für Dich übersetzt.
Gruß Sebastian
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.