Access has a nasty habit of naming controls the same name as the field to which it is bound. Guess what? This confuses Access later on when you get around to doing some coding. I change the control name to have a preface of the type of control, txtControl for TextBox, cboControl for a ComboBox, etc. Yes, the txtduration control should not be bound! It is a really bad practice to store calculated values in a table. Recalculate if you need the value again but do not store the answer! If you change the control names then the ControlSource of the txtDuration control will be:
=txtEndTime-txtStartTime or something like it. Using the default value will not work, as you discovered. Add the controls rather than the fields since the fields are not updated until you save the record.