PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Anfängerfrage Bascom (wechsle gerade von AVRco)



corado
23.09.2008, 11:19
Hallo,
ich habe mir egrade die Demoversion von dascom geladen und werde sie mir wohl auch kaufen da ich die Nase von AVRco Pascal voll habe.
Das Forum ist Schrott die Amdin dort hochnäsig, und 1000€ ausgeben nur für Hobbyprogrammeirung ist mehr als dumm!!!
Und mit der Mega (Version ist man derart eingeschränkt, das viele meienr projekte nie umgesetzt wurden weil einfach die Motivation durch Erweiterbarkeit fehlte!!
Daher muss ich leider sagen habe ich dadurch das ich mich mit AVRco beschäftigt habe sehr viel ksotbare Zeit verschwendet.

NUN zu meiner Frage:-)
Durch einen Umstieg ist man immer einige Sachen gewphnt die man gerne beibehalten möchten.
Bei AVRco klickt man bei einem neuen Projekt einfach die CPU, das Display etc pp an und dann steht das Code Grundgerüst.
Ich finde zwar, wie ich das alles bei BAscom eisntlelen kann aber wenn ich dann auch neu klicke kommt eine leere Seite.
Mache ich was falsch oder gibt es diese zugegeben nicht unbedingt notwendige Funtkion nicht?

UND

Bei AVRCo gab es einen Befehl/Procedure namens ONSystick .....
Alles innerhalb dieser Procedure wurde unabhängig vom restlichen programm immer bei einem Systick, der voeingestellt werden konnte(z.B. 10ms) aufgerugen.
Dieses ist z.B. notwendig bei einer Akku Kapazitätsanzeige um genau messen zu können.
Gibt es so etwas bei Bascom auch.
Ich schmöcker noch ein wenig im Bascom Handbuch.
Bin aber noch ziemlich am Anfangund wollte schon mal ein enig drauflos programmieren.

Vitis
23.09.2008, 11:59
Der Systick hat nix mit Bascom zu tun,
sondern mit dem
verwendeten Controller.
Mir ist jetzt aber auch kein AVR
bekannt, der nicht mindestens einen
8-Bit Timer mitbringt. Viele haben
auch 1 oder mehr 16-Bit Timer und die
können sog. Timerinterrupts erzeugen, die
genau Deine beschriebene Funktion bilden.

Einen Codegenerator an sich gibts in Bascom
nicht, man kann aber viele Einstellungen in
den Konfiguration Reitern vornehmen, auch wenn ich
das nicht für sinnvoll halte und die entsprechenden
Anweisungen lieber in den Code schreibe, der wird
dann später besser lesbar.

Michael
23.09.2008, 12:06
Hallo corado,


die Amdin dort hochnäsig
das habe ich auch schon leidvoll erfahren müssen...


Daher muss ich leider sagen habe ich dadurch das ich mich mit AVRco beschäftigt habe sehr viel ksotbare Zeit verschwendet.
das glaube ich nicht, Programmierung, egal welche Sprache, schult den Geist.


Bei AVRco klickt man bei einem neuen Projekt einfach die CPU, das Display etc pp an und dann steht das Code Grundgerüst.
Ich finde zwar, wie ich das alles bei BAscom eisntlelen kann aber wenn ich dann auch neu klicke kommt eine leere Seite.
Mache ich was falsch oder gibt es diese zugegeben nicht unbedingt notwendige Funtkion nicht?
Es gibt bei Bascom zwar die Einstellungen für Prozessor etc. im Menu und das funktioniert auch, aber:
Wenn du deinen Code mal jemand anderem zeigst oder selber nach einer Weile reinschaust, weißt du nicht mehr, welche Einstellungen gemacht wurden. Deshalb ist es besser, den Kopf immer einzutragen.
Ich hole mir immer ein Programmgerüst für ein neues Projekt aus einem alten, so in der Art:


$crystal = 125000
$regfile = "m88def.dat"

$hwstack = 32
$swstack = 32
$framesize = 16
'hier LCD, Timer, ADC, Interrupts etc.
'hier Variablen definieren und initialisieren
do
'Hauptprogramm
loop
End
'IRQs und Subroutinen


Den Systick mußt du dir mit einem Timer selber bauen.

Gruß, Michael

askazo
23.09.2008, 12:12
Mal eine kurze Frage zwischendurch, ohne jetzt der Bascom-Fraktion auf den Fuß treten zu wollen:
Wieso nimmst Du nicht C?
Da hast Du eine komplett kostenlose IDE, guten Support in diversen Foren und erlernst eine sehr viel verbreitetere Programmiersprache als Bascom.

Ich will Dich jetzt nicht von Bascom abhalten, mich würden nur mal die Gründe interessieren, die für Bascom sprechen...

Gruß,
askazo

corado
23.09.2008, 12:36
Weil ich schnell ein fertiges Ergenbnis haben will.
In ist das für Freaks sichre auch möglich, aber wenn ich alle jubeljahre mal was baue soll es schnell gehen, und die Programmierung nicht mehr auf halten als die restiliche Planung des Projekts.
Als ich ganz am Anfang meiner Atmel Versuche mit gcc mal ein Display ansteuern wollte verlor ich doch recht schnell die Lust daran, weil es nicht klappte.
Mit AVRco hatte ich mit einer reinem Prorammierzeit als Anfänger von wenigen Minuten meinen ersten TExt auf dem Display! Bei BAscom scheint es ähnlich einfach zu sein.
Auch existieren hier unendlich viele Libs.
Bei gcc finde ich enig offizielle und ich kan mir vorstellen das viele ihre libs nicht weggeben wollen, weil man solle es ja sleber machen und nicht nur abschreiben!!!
Aber wie schon geasgt, will ich lediglich ein schnelles Ergebniss.
ICh habe mit dem Fahrzeug für das diese ganzen basteleien sind mehr als genug zu tun, so das ich mir diese Tipperei sparen kann

corado
23.09.2008, 12:40
ach ja, und ich hatte letztes mal ewig gebraucht einen Amperestundenzähler zu schreiben mit Pascal weil ich das mit den Floats nicht hinbekommen hatte.
Ist natürlich jetzt ultraleicht nachdem ich weiß wie,
mit
a := word(daten); 'AVRco pascal wobei a Typ Float ist
a = daten 'Bascom wobei a Typ Float ist und Daten word

wie ginge das in c??
Da ist sowas sicher nicht mal eben in eienr Zeile erledigt außer mit kryptischen abkürzungen-oder?

corado
23.09.2008, 12:47
Wenn ich mir diese beiden beispiele ansehe merkt man das e sohne große Einarbeitung nicht geht


Bascom
$regfile = "m32def.dat"
$framesize = 32
$swstack = 32
$hwstack = 32
$crystal = 1000000

Config Portc.0 = Output 'Ein Pin wird als Ausgang konfiguriert PC0 (also Pin0 von Port C)

Do
Portc.0 = 1 'Pin wird auf High, also 5V geschaltet
Waitms 100
Portc.0 = 0 'Pin wird auf Low, also 0V geschaltet
Waitms 100
Loop

End




c

#include <avr/io.h>
#include <util/delay.h>

int main(void){
DDRC=1<<PC0;
while (1) {
PORTC=1<<PC0;
_delay_ms(100);
PORTC&=~(1<<PC0);
_delay_ms(100);
}
return 1;
}

Der basic code ist für jeden der sich ein wenig mit programmierung beschäftigt hat, verständlich, bei dem C code hört es bei mir hier auf:
PORTC&=~(1<<PC0);

fhs
23.09.2008, 12:55
Hi,


... bei dem C code hört es bei mir hier auf: PORTC&=~(1<<PC0);
die Schuld liegt bei mir. Natürlich hätte man das auch (funktioniert identisch, ist aber "nicht so sauber" geschrieben) so schreiben können:


#include <avr/io.h>
#include <util/delay.h>

int main(void){
DDRC=1;
while (1) {
PORTC=1;
_delay_ms(100);
PORTC=0;
_delay_ms(100);
}
return 1;
}


Ich komme aus dem Assemblerland (habe in den 70ern noch "handassembliert") und komme mit "C", nicht aber mit BASIC und seinen Dialekten klar. Suum cuique.

Gruß

Fred

corado
23.09.2008, 13:05
naja, und genau hier sehe ich das Problem.
Die Leute die gcc nutzen sind halt meißt recht Firm.
Wenn ich da nicht weiterkomme gibt das ein Gemetzel :-)
Bei Bascom sitzen nur so Trofnasen wie ich :-)
Da wird es einem auch Haarklein erklärt.

askazo
23.09.2008, 14:22
ach ja, und ich hatte letztes mal ewig gebraucht einen Amperestundenzähler zu schreiben mit Pascal weil ich das mit den Floats nicht hinbekommen hatte.
Ist natürlich jetzt ultraleicht nachdem ich weiß wie,
mit
a := word(daten); 'AVRco pascal wobei a Typ Float ist
a = daten 'Bascom wobei a Typ Float ist und Daten word

wie ginge das in c??
Da ist sowas sicher nicht mal eben in eienr Zeile erledigt außer mit kryptischen abkürzungen-oder?
In C sieht's fast genauso aus:
a = (float)daten;

Natürlich steht und fällt in C auch alles mit den Bibliotheken - Wie bei jeder anderen Programiersprache auch. Man kann auch so kryptisches Zeug wie
PORTC&=~(1<<PC0);
durch eine kleine Definition vernünftig benutzbar und lesbar machen.
Ich habe z.B. in jedem C-Projekt (u.a.) folgende 3 Definitionen drin:

#define SetBit(ADDRESS,BIT) ((ADDRESS) |= (1<<(BIT)))
#define ClrBit(ADDRESS,BIT) ((ADDRESS) &= ~(1<<(BIT)))
#define ToogleBit(ADDRESS,BIT) ((ADDRESS) ^= (1<<(BIT)))

So muss ich zum setzen eines Ports nur z.B.
SetBit(PORTE,3);
schreiben - ganz simpel und einfach.
Und an Libs gibt es eigentlich reichlich auswahl im Netz. Dass C-Programmierer Ihre Libs nicht rausgeben, weil man's "Selber machen soll", kann ich eigentlich nicht bestätigen. Und ein "Gemetzel" wird's sicher auch nicht geben. Aber gut, wenn man wirklich nur hobby-mässig schnell an Ergebnisse kommen will, ist Bascom natürlich nicht verkehrt.

Gruß,
askazo

Besserwessi
23.09.2008, 18:31
BASCOM und wohl auch AVRco haben einige spezielle Funktionen, wie Software UART und LCD Ansteuerung schon im Compiler drin. Wenn man damit auskommt kriegt man kleine Programme recht schnell hin. Wenn einem die vordefinierten Funktionen nicht mehr weiterhelfen wird es schwieriger.
Was mich an BASCOM immer stört, ist das man nur eine Rechenoperation pro Zeite nehmen kann:
a = 10*b +1 geht also nicht. Das macht die Programme unnötig lang.

Einguter Pascal Compiler hat sicher was für sich, aber 1000 EUR sind doch etwas viel fürs Hobby. Die Zeit mit dem pascal Compiler war sicher nicht umsonst, denn die 2. und 3. Sprache zu lernen geht recht schnell. Zur Not gibt es von GCC ja auch noch eine ADA Version, aber da relativ wenig Unterstützung.

Bauteiltöter
23.09.2008, 19:55
Hi,

wenn man teilweise mit BASCOM nicht mehr klar kommt, kann man immer noch mit $asm asm-Code einfügen. So kann man an zeitkritischen stellen sehr präzise arbeiten.

Ich finde, BASCOM ist der beste einstieg, wenn man schnell erfolge sehen will.
Ich habe grade mal 10min gebraucht, bis ich die erste LED am blinken hatte :)